input grammar: cplusplus.y
State 0 conflicts: 41 shift/reduce, 3 reduce/reduce State 2 conflicts: 39 shift/reduce, 3 reduce/reduce State 4 conflicts: 1 reduce/reduce State 10 conflicts: 1 shift/reduce State 22 conflicts: 3 shift/reduce, 1 reduce/reduce State 23 conflicts: 1 shift/reduce State 25 conflicts: 1 shift/reduce State 50 conflicts: 36 shift/reduce, 3 reduce/reduce State 51 conflicts: 8 shift/reduce, 5 reduce/reduce State 54 conflicts: 3 shift/reduce State 58 conflicts: 3 shift/reduce, 2 reduce/reduce State 59 conflicts: 3 shift/reduce State 61 conflicts: 40 shift/reduce, 3 reduce/reduce State 63 conflicts: 1 shift/reduce State 75 conflicts: 1 reduce/reduce State 89 conflicts: 1 shift/reduce, 1 reduce/reduce State 96 conflicts: 100 reduce/reduce State 101 conflicts: 39 shift/reduce, 3 reduce/reduce State 114 conflicts: 39 shift/reduce, 3 reduce/reduce State 116 conflicts: 61 reduce/reduce State 118 conflicts: 39 shift/reduce, 3 reduce/reduce State 119 conflicts: 5 shift/reduce, 1 reduce/reduce State 121 conflicts: 1 shift/reduce State 124 conflicts: 1 shift/reduce State 129 conflicts: 2 shift/reduce State 132 conflicts: 1 shift/reduce, 1 reduce/reduce State 134 conflicts: 2 shift/reduce State 135 conflicts: 40 shift/reduce, 3 reduce/reduce State 137 conflicts: 1 shift/reduce State 141 conflicts: 1 shift/reduce State 146 conflicts: 2 shift/reduce State 147 conflicts: 39 shift/reduce, 3 reduce/reduce State 152 conflicts: 3 shift/reduce State 158 conflicts: 3 shift/reduce State 167 conflicts: 2 shift/reduce State 168 conflicts: 3 shift/reduce State 171 conflicts: 1 shift/reduce, 1 reduce/reduce State 172 conflicts: 1 shift/reduce State 174 conflicts: 3 shift/reduce State 175 conflicts: 3 shift/reduce, 1 reduce/reduce State 177 conflicts: 1 shift/reduce State 178 conflicts: 1 shift/reduce State 179 conflicts: 1 reduce/reduce State 180 conflicts: 2 shift/reduce State 186 conflicts: 1 shift/reduce State 190 conflicts: 1 shift/reduce State 195 conflicts: 39 shift/reduce, 3 reduce/reduce State 198 conflicts: 1 shift/reduce State 200 conflicts: 100 reduce/reduce State 202 conflicts: 1 shift/reduce State 207 conflicts: 2 shift/reduce State 213 conflicts: 39 shift/reduce, 3 reduce/reduce State 218 conflicts: 39 shift/reduce, 3 reduce/reduce State 225 conflicts: 1 shift/reduce State 227 conflicts: 1 shift/reduce State 228 conflicts: 1 shift/reduce State 232 conflicts: 1 shift/reduce State 237 conflicts: 2 reduce/reduce State 244 conflicts: 2 shift/reduce State 246 conflicts: 1 shift/reduce State 247 conflicts: 2 shift/reduce State 248 conflicts: 2 shift/reduce State 251 conflicts: 2 shift/reduce State 252 conflicts: 2 shift/reduce State 253 conflicts: 2 shift/reduce State 260 conflicts: 2 shift/reduce State 261 conflicts: 2 shift/reduce State 263 conflicts: 2 shift/reduce State 281 conflicts: 2 shift/reduce State 282 conflicts: 1 shift/reduce State 284 conflicts: 1 shift/reduce State 286 conflicts: 1 shift/reduce, 1 reduce/reduce State 289 conflicts: 1 shift/reduce State 294 conflicts: 1 shift/reduce State 297 conflicts: 1 reduce/reduce State 304 conflicts: 2 shift/reduce State 319 conflicts: 1 shift/reduce State 325 conflicts: 1 shift/reduce State 326 conflicts: 1 shift/reduce State 327 conflicts: 2 shift/reduce State 328 conflicts: 1 shift/reduce State 330 conflicts: 2 shift/reduce State 333 conflicts: 2 shift/reduce State 334 conflicts: 4 shift/reduce State 337 conflicts: 1 shift/reduce State 344 conflicts: 1 shift/reduce State 347 conflicts: 2 shift/reduce State 356 conflicts: 5 shift/reduce, 2 reduce/reduce State 363 conflicts: 3 shift/reduce, 1 reduce/reduce State 377 conflicts: 2 shift/reduce State 378 conflicts: 2 shift/reduce State 379 conflicts: 2 shift/reduce State 386 conflicts: 3 shift/reduce State 393 conflicts: 1 shift/reduce State 397 conflicts: 1 shift/reduce State 402 conflicts: 2 shift/reduce State 405 conflicts: 3 shift/reduce State 407 conflicts: 3 reduce/reduce State 408 conflicts: 1 shift/reduce State 413 conflicts: 24 shift/reduce, 3 reduce/reduce State 414 conflicts: 2 shift/reduce, 1 reduce/reduce State 415 conflicts: 1 shift/reduce State 419 conflicts: 5 shift/reduce, 1 reduce/reduce State 422 conflicts: 2 shift/reduce State 423 conflicts: 1 shift/reduce State 424 conflicts: 5 shift/reduce, 1 reduce/reduce State 431 conflicts: 1 shift/reduce State 432 conflicts: 2 shift/reduce State 437 conflicts: 2 shift/reduce State 439 conflicts: 32 shift/reduce State 445 conflicts: 1 shift/reduce State 479 conflicts: 1 shift/reduce State 494 conflicts: 1 shift/reduce State 499 conflicts: 1 shift/reduce State 501 conflicts: 6 shift/reduce State 506 conflicts: 100 reduce/reduce State 511 conflicts: 2 shift/reduce State 512 conflicts: 2 shift/reduce State 513 conflicts: 2 shift/reduce State 514 conflicts: 2 shift/reduce State 515 conflicts: 2 shift/reduce State 519 conflicts: 2 shift/reduce State 521 conflicts: 2 shift/reduce State 524 conflicts: 2 shift/reduce State 525 conflicts: 1 shift/reduce State 526 conflicts: 2 shift/reduce State 527 conflicts: 2 shift/reduce State 528 conflicts: 2 shift/reduce State 529 conflicts: 2 shift/reduce State 530 conflicts: 2 shift/reduce State 531 conflicts: 2 shift/reduce State 532 conflicts: 2 shift/reduce State 533 conflicts: 2 shift/reduce State 535 conflicts: 2 shift/reduce State 537 conflicts: 5 shift/reduce, 1 reduce/reduce State 542 conflicts: 2 shift/reduce State 543 conflicts: 2 shift/reduce State 555 conflicts: 2 shift/reduce State 556 conflicts: 2 shift/reduce State 557 conflicts: 2 shift/reduce State 558 conflicts: 2 shift/reduce State 559 conflicts: 2 shift/reduce State 560 conflicts: 2 shift/reduce State 562 conflicts: 2 shift/reduce State 563 conflicts: 2 shift/reduce State 564 conflicts: 2 shift/reduce State 565 conflicts: 2 shift/reduce State 566 conflicts: 2 shift/reduce State 571 conflicts: 2 shift/reduce State 572 conflicts: 2 shift/reduce State 573 conflicts: 2 shift/reduce State 574 conflicts: 2 shift/reduce State 575 conflicts: 2 shift/reduce State 576 conflicts: 2 shift/reduce State 577 conflicts: 2 shift/reduce State 579 conflicts: 2 shift/reduce State 595 conflicts: 39 shift/reduce, 3 reduce/reduce State 607 conflicts: 2 shift/reduce State 617 conflicts: 4 shift/reduce State 624 conflicts: 2 shift/reduce State 626 conflicts: 3 shift/reduce, 1 reduce/reduce State 627 conflicts: 3 shift/reduce State 628 conflicts: 1 shift/reduce State 631 conflicts: 1 shift/reduce State 637 conflicts: 2 reduce/reduce State 640 conflicts: 1 shift/reduce State 653 conflicts: 2 shift/reduce State 654 conflicts: 1 shift/reduce State 659 conflicts: 2 shift/reduce State 662 conflicts: 2 shift/reduce State 674 conflicts: 2 shift/reduce State 675 conflicts: 1 shift/reduce State 677 conflicts: 2 shift/reduce State 679 conflicts: 2 shift/reduce State 682 conflicts: 1 shift/reduce State 686 conflicts: 1 reduce/reduce State 688 conflicts: 1 shift/reduce State 690 conflicts: 2 shift/reduce, 1 reduce/reduce State 693 conflicts: 5 shift/reduce State 700 conflicts: 2 shift/reduce State 702 conflicts: 2 shift/reduce State 704 conflicts: 3 shift/reduce, 2 reduce/reduce State 705 conflicts: 1 shift/reduce State 740 conflicts: 2 shift/reduce State 743 conflicts: 2 shift/reduce State 749 conflicts: 1 shift/reduce State 750 conflicts: 1 shift/reduce State 756 conflicts: 2 shift/reduce State 757 conflicts: 100 reduce/reduce State 761 conflicts: 6 shift/reduce State 763 conflicts: 2 shift/reduce State 774 conflicts: 2 shift/reduce State 776 conflicts: 2 shift/reduce State 778 conflicts: 2 shift/reduce State 783 conflicts: 1 shift/reduce State 784 conflicts: 1 shift/reduce State 790 conflicts: 1 shift/reduce State 793 conflicts: 37 shift/reduce, 3 reduce/reduce State 803 conflicts: 1 reduce/reduce State 804 conflicts: 1 shift/reduce State 822 conflicts: 1 reduce/reduce State 828 conflicts: 39 shift/reduce, 3 reduce/reduce State 848 conflicts: 1 shift/reduce State 863 conflicts: 1 reduce/reduce State 865 conflicts: 2 shift/reduce, 2 reduce/reduce State 874 conflicts: 1 shift/reduce, 1 reduce/reduce State 881 conflicts: 2 shift/reduce State 886 conflicts: 2 shift/reduce State 906 conflicts: 1 shift/reduce State 907 conflicts: 2 shift/reduce State 909 conflicts: 2 shift/reduce State 916 conflicts: 4 shift/reduce State 919 conflicts: 5 shift/reduce State 925 conflicts: 1 shift/reduce State 935 conflicts: 1 shift/reduce State 943 conflicts: 1 shift/reduce State 944 conflicts: 2 shift/reduce State 945 conflicts: 2 shift/reduce State 950 conflicts: 2 shift/reduce State 962 conflicts: 2 shift/reduce State 964 conflicts: 2 shift/reduce State 965 conflicts: 1 shift/reduce State 966 conflicts: 3 shift/reduce State 967 conflicts: 2 shift/reduce State 969 conflicts: 2 shift/reduce State 972 conflicts: 36 shift/reduce, 3 reduce/reduce State 973 conflicts: 2 shift/reduce State 978 conflicts: 37 shift/reduce, 3 reduce/reduce State 981 conflicts: 2 shift/reduce State 989 conflicts: 39 shift/reduce, 3 reduce/reduce State 1009 conflicts: 1 reduce/reduce State 1019 conflicts: 1 shift/reduce State 1025 conflicts: 3 shift/reduce State 1028 conflicts: 1 shift/reduce State 1030 conflicts: 1 shift/reduce State 1031 conflicts: 1 shift/reduce State 1039 conflicts: 1 shift/reduce State 1051 conflicts: 4 shift/reduce State 1052 conflicts: 2 shift/reduce State 1053 conflicts: 2 shift/reduce State 1057 conflicts: 2 shift/reduce State 1060 conflicts: 1 shift/reduce, 1 reduce/reduce State 1063 conflicts: 27 shift/reduce, 3 reduce/reduce State 1068 conflicts: 2 shift/reduce State 1069 conflicts: 2 shift/reduce State 1070 conflicts: 2 shift/reduce State 1071 conflicts: 2 shift/reduce State 1076 conflicts: 2 shift/reduce State 1080 conflicts: 2 shift/reduce State 1084 conflicts: 3 shift/reduce State 1086 conflicts: 2 shift/reduce State 1091 conflicts: 2 reduce/reduce State 1092 conflicts: 1 shift/reduce State 1093 conflicts: 2 shift/reduce State 1097 conflicts: 37 shift/reduce, 3 reduce/reduce State 1101 conflicts: 2 shift/reduce State 1103 conflicts: 2 shift/reduce State 1138 conflicts: 2 shift/reduce State 1140 conflicts: 1 shift/reduce State 1143 conflicts: 2 shift/reduce State 1147 conflicts: 1 shift/reduce, 2 reduce/reduce State 1156 conflicts: 39 shift/reduce, 3 reduce/reduce State 1169 conflicts: 1 shift/reduce State 1172 conflicts: 2 shift/reduce State 1177 conflicts: 37 shift/reduce, 3 reduce/reduce State 1182 conflicts: 37 shift/reduce, 3 reduce/reduce State 1184 conflicts: 19 shift/reduce, 3 reduce/reduce State 1186 conflicts: 37 shift/reduce, 39 reduce/reduce State 1196 conflicts: 62 shift/reduce, 41 reduce/reduce State 1218 conflicts: 1 shift/reduce State 1219 conflicts: 1 shift/reduce State 1237 conflicts: 2 shift/reduce State 1243 conflicts: 2 shift/reduce State 1245 conflicts: 19 shift/reduce, 39 reduce/reduce State 1250 conflicts: 37 shift/reduce, 3 reduce/reduce State 1251 conflicts: 62 shift/reduce, 41 reduce/reduce State 1254 conflicts: 19 shift/reduce, 3 reduce/reduce State 1263 conflicts: 1 shift/reduce State 1266 conflicts: 1 shift/reduce State 1269 conflicts: 1 shift/reduce State 1271 conflicts: 3 shift/reduce State 1272 conflicts: 37 shift/reduce, 3 reduce/reduce State 1273 conflicts: 2 shift/reduce State 1276 conflicts: 2 shift/reduce State 1279 conflicts: 19 shift/reduce, 3 reduce/reduce State 1280 conflicts: 1 shift/reduce State 1283 conflicts: 2 shift/reduce State 1287 conflicts: 1 shift/reduce State 1291 conflicts: 2 shift/reduce State 1292 conflicts: 3 shift/reduce State 1293 conflicts: 2 shift/reduce State 1295 conflicts: 37 shift/reduce, 3 reduce/reduce State 1296 conflicts: 37 shift/reduce, 3 reduce/reduce State 1297 conflicts: 4 shift/reduce State 1302 conflicts: 1 reduce/reduce State 1303 conflicts: 1 reduce/reduce State 1308 conflicts: 37 shift/reduce, 3 reduce/reduce State 1315 conflicts: 37 shift/reduce, 3 reduce/reduce State 1317 conflicts: 37 shift/reduce, 3 reduce/reduce State 1318 conflicts: 1 shift/reduce State 1322 conflicts: 37 shift/reduce, 3 reduce/reduce
0 $accept → translation-unit $end 1 COMMA-opt → %empty 2 | "," 3 CONSTEXPR-opt → %empty 4 | "constexpr" 5 ELLIPSIS-opt → %empty 6 | "..." 7 EXPORT-opt → %empty 8 | "export" 9 EXTERN-opt → %empty 10 | "extern" 11 IDENTIFIER-opt → %empty 12 | IDENTIFIER 13 INLINE-opt → %empty 14 | "inline" 15 NOEXCEPT-opt → %empty 16 | "noexcept" 17 NOT-opt → %empty 18 | "!" 19 SCOPE-opt → %empty 20 | "::" 21 TEMPLATE-opt → %empty 22 | "template" 23 THIS-opt → %empty 24 | "this" 25 TYPENAME-opt → %empty 26 | "typename" 27 VIRTUAL-opt → %empty 28 | "virtual" 29 abstract-declarator → ptr-abstract-declarator 30 | noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | abstract-pack-declarator 32 abstract-declarator-opt → %empty 33 | abstract-declarator 34 abstract-pack-declarator → noptr-abstract-pack-declarator 35 | ptr-operator abstract-pack-declarator 36 access-specifier → "private" 37 | "protected" 38 | "public" 39 access-specifier-opt → %empty 40 | access-specifier 41 additive-expression → multiplicative-expression 42 | additive-expression "+" multiplicative-expression 43 | additive-expression "-" multiplicative-expression 44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt ")" 46 | "alignas" "(" constant-expression ELLIPSIS-opt ")" 47 and-expression → equality-expression 48 | and-expression "&" equality-expression 49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 50 assignment-expression → conditional-expression 51 | yield-expression 52 | throw-expression 53 | logical-or-expression assignment-operator initializer-clause 54 assignment-expression-opt → %empty 55 | assignment-expression 56 assignment-operator → "=" 57 | "*=" 58 | "/=" 59 | "%=" 60 | "+=" 61 | "-=" 62 | ">>=" 63 | "<<=" 64 | "&=" 65 | "^=" 66 | "|=" 67 attribute → attribute-token attribute-argument-clause-opt 68 attribute-argument-clause → "(" balanced-token-seq-opt ")" 69 attribute-argument-clause-opt → %empty 70 | attribute-argument-clause 71 attribute-declaration → attribute-specifier-seq ";" 72 attribute-list → attribute-opt 73 | attribute-list "," attribute-opt 74 | attribute "..." 75 | attribute-list "," attribute "..." 76 attribute-namespace → IDENTIFIER 77 attribute-opt → %empty 78 | attribute 79 attribute-scoped-token → attribute-namespace "::" IDENTIFIER 80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → %empty 84 | attribute-specifier-seq 85 attribute-token → IDENTIFIER 86 | attribute-scoped-token 87 attribute-using-prefix → "using" attribute-namespace ":" 88 attribute-using-prefix-opt → %empty 89 | attribute-using-prefix 90 await-expression → "co_await" cast-expression 91 balanced-token → "(" balanced-token-seq-opt ")" 92 | "[" balanced-token-seq-opt "]" 93 | "{" balanced-token-seq-opt "}" 94 | BALANCED_TOKEN 95 balanced-token-seq → balanced-token 96 | balanced-token-seq balanced-token 97 balanced-token-seq-opt → %empty 98 | balanced-token-seq 99 base-clause → ":" base-specifier-list 100 base-clause-opt → %empty 101 | base-clause 102 base-specifier → attribute-specifier-seq-opt class-or-decltype 103 | attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 105 base-specifier-list → base-specifier ELLIPSIS-opt 106 | base-specifier-list "," base-specifier ELLIPSIS-opt 107 block-declaration → simple-declaration 108 | asm-declaration 109 | namespace-alias-definition 110 | using-declaration 111 | using-enum-declaration 112 | using-directive 113 | static_assert-declaration 114 | alias-declaration 115 | opaque-enum-declaration 116 brace-or-equal-initializer → "=" initializer-clause 117 | braced-init-list 118 brace-or-equal-initializer-opt → %empty 119 | brace-or-equal-initializer 120 braced-init-list → "{" initializer-list COMMA-opt "}" 121 | "{" designated-initializer-list COMMA-opt "}" 122 | "{" "}" 123 capture → simple-capture 124 | init-capture 125 capture-default → "&" 126 | "=" 127 capture-list → capture 128 | capture-list "," capture 129 cast-expression → unary-expression 130 | "(" type-id ")" cast-expression 131 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | class-key attribute-specifier-seq-opt base-clause-opt 133 class-head-name → nested-name-specifier-opt class-name 134 class-key → "class" 135 | "struct" 136 | "union" 137 class-name → IDENTIFIER 138 | simple-template-id 139 class-or-decltype → nested-name-specifier-opt type-name 140 | nested-name-specifier "template" simple-template-id 141 | decltype-specifier 142 class-specifier → class-head "{" member-specification-opt "}" 143 class-virt-specifier → "final" 144 class-virt-specifier-opt → %empty 145 | class-virt-specifier 146 compare-expression → shift-expression 147 | compare-expression "<=>" shift-expression 148 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 149 compound-statement → "{" statement-seq-opt "}" 150 concept-definition → "concept" concept-name "=" constraint-expression ";" 151 concept-name → IDENTIFIER 152 condition → expression 153 | attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 154 condition-opt → %empty 155 | condition 156 conditional-expression → logical-or-expression 157 | logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → conditional-expression 159 constant-expression-opt → %empty 160 | constant-expression 161 constraint-expression → logical-or-expression 162 constraint-logical-and-expression → primary-expression 163 | constraint-logical-and-expression "&&" primary-expression 164 constraint-logical-or-expression → constraint-logical-and-expression 165 | constraint-logical-or-expression "||" constraint-logical-and-expression 166 conversion-declarator → ptr-operator conversion-declarator-opt 167 conversion-declarator-opt → %empty 168 | conversion-declarator 169 conversion-function-id → "operator" conversion-type-id 170 conversion-type-id → type-specifier-seq conversion-declarator-opt 171 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt ";" 172 ctor-initializer → ":" mem-initializer-list 173 ctor-initializer-opt → %empty 174 | ctor-initializer 175 cv-qualifier → "const" 176 | "volatile" 177 cv-qualifier-seq → cv-qualifier cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → %empty 179 | cv-qualifier-seq 180 decl-specifier → storage-class-specifier 181 | defining-type-specifier 182 | function-specifier 183 | "friend" 184 | "typedef" 185 | "constexpr" 186 | "consteval" 187 | "constinit" 188 | "inline" 189 decl-specifier-seq → decl-specifier attribute-specifier-seq-opt 190 | decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → %empty 192 | decl-specifier-seq 193 declaration → block-declaration 194 | nodeclspec-function-declaration 195 | function-definition 196 | template-declaration 197 | deduction-guide 198 | explicit-instantiation 199 | explicit-specialization 200 | export-declaration 201 | linkage-specification 202 | namespace-definition 203 | empty-declaration 204 | attribute-declaration 205 | module-import-declaration 206 declaration-seq → declaration 207 | declaration-seq declaration 208 declaration-seq-opt → %empty 209 | declaration-seq 210 declaration-statement → block-declaration 211 declarator → ptr-declarator 212 | noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → ELLIPSIS-opt id-expression 214 decltype-specifier → "decltype" "(" expression ")" 215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 216 defining-type-id → defining-type-specifier-seq abstract-declarator-opt 217 defining-type-specifier → type-specifier 218 | class-specifier 219 | enum-specifier 220 defining-type-specifier-seq → defining-type-specifier attribute-specifier-seq-opt 221 | defining-type-specifier defining-type-specifier-seq 222 delete-expression → SCOPE-opt "delete" cast-expression 223 | SCOPE-opt "delete" "[" "]" cast-expression 224 designated-initializer-clause → designator brace-or-equal-initializer 225 designated-initializer-list → designated-initializer-clause 226 | designated-initializer-list "," designated-initializer-clause 227 designator → "." IDENTIFIER 228 elaborated-enum-specifier → "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | class-key simple-template-id 231 | class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | elaborated-enum-specifier 233 empty-declaration → ";" 234 enclosing-namespace-specifier → IDENTIFIER 235 | enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER 236 enum-base → ":" type-specifier-seq 237 enum-base-opt → %empty 238 | enum-base 239 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 240 enum-head-name → nested-name-specifier-opt IDENTIFIER 241 enum-head-name-opt → %empty 242 | enum-head-name 243 enum-key → "enum" 244 | "enum" "class" 245 | "enum" "struct" 246 enum-name → IDENTIFIER 247 enum-specifier → enum-head "{" enumerator-list-opt "}" 248 | enum-head "{" enumerator-list "," "}" 249 enumerator → IDENTIFIER attribute-specifier-seq-opt 250 enumerator-definition → enumerator 251 | enumerator "=" constant-expression 252 enumerator-list → enumerator-definition 253 | enumerator-list "," enumerator-definition 254 enumerator-list-opt → %empty 255 | enumerator-list 256 equality-expression → relational-expression 257 | equality-expression "==" relational-expression 258 | equality-expression "!=" relational-expression 259 exception-declaration → attribute-specifier-seq-opt type-specifier-seq declarator 260 | attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt 261 | "..." 262 exclusive-or-expression → and-expression 263 | exclusive-or-expression "^" and-expression 264 explicit-instantiation → EXTERN-opt "template" declaration 265 explicit-specialization → "template" "<" ">" declaration 266 explicit-specifier → "explicit" "(" constant-expression ")" 267 | "explicit" 268 explicit-specifier-opt → %empty 269 | explicit-specifier 270 export-declaration → "export" declaration 271 | "export" "{" declaration-seq-opt "}" 272 | "export" module-import-declaration 273 expr-or-braced-init-list → expression 274 | braced-init-list 275 expr-or-braced-init-list-opt → %empty 276 | expr-or-braced-init-list 277 expression → assignment-expression 278 | expression "," assignment-expression 279 expression-list → initializer-list 280 expression-list-opt → %empty 281 | expression-list 282 expression-opt → %empty 283 | expression 284 expression-statement → expression-opt ";" 285 fold-expression → "(" cast-expression fold-operator "..." ")" 286 | "(" "..." fold-operator cast-expression ")" 287 | "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 288 fold-operator → "+" 289 | "-" 290 | "*" 291 | "/" 292 | "%" 293 | "^" 294 | "&" 295 | "|" 296 | "<<" 297 | ">>" 298 | "+=" 299 | "-=" 300 | "*=" 301 | "/=" 302 | "%=" 303 | "^=" 304 | "&=" 305 | "|=" 306 | "<<=" 307 | ">>=" 308 | "=" 309 | "==" 310 | "!=" 311 | "<" 312 | ">" 313 | "<=" 314 | ">=" 315 | "&&" 316 | "||" 317 | "," 318 | ".*" 319 | "->*" 320 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq declarator 321 | attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 322 for-range-initializer → expr-or-braced-init-list 323 function-body → ctor-initializer-opt compound-statement 324 | function-try-block 325 | "=" "default" ";" 326 | "=" "delete" ";" 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → "virtual" 330 | explicit-specifier 331 function-try-block → "try" ctor-initializer-opt compound-statement handler-seq 332 global-module-fragment → "module" ";" declaration-seq-opt 333 global-module-fragment-opt → %empty 334 | global-module-fragment 335 handler → "catch" "(" exception-declaration ")" compound-statement 336 handler-seq → handler handler-seq-opt 337 handler-seq-opt → %empty 338 | handler-seq 339 header-name → HEADER_NAME 340 id-expression → unqualified-id 341 | qualified-id 342 identifier-list → IDENTIFIER 343 | identifier-list "," IDENTIFIER 344 inclusive-or-expression → exclusive-or-expression 345 | inclusive-or-expression "|" exclusive-or-expression 346 init-capture → ELLIPSIS-opt IDENTIFIER initializer 347 | "&" ELLIPSIS-opt IDENTIFIER initializer 348 init-declarator → declarator initializer-opt 349 | declarator requires-clause 350 init-declarator-list → init-declarator 351 | init-declarator-list "," init-declarator 352 init-declarator-list-opt → %empty 353 | init-declarator-list 354 init-statement → expression-statement 355 | simple-declaration 356 | alias-declaration 357 init-statement-opt → %empty 358 | init-statement 359 initializer → brace-or-equal-initializer 360 | "(" expression-list ")" 361 initializer-clause → assignment-expression 362 | braced-init-list 363 initializer-list → initializer-clause ELLIPSIS-opt 364 | initializer-list "," initializer-clause ELLIPSIS-opt 365 initializer-opt → %empty 366 | initializer 367 iteration-statement → "while" "(" condition ")" statement 368 | "do" statement "while" "(" expression ")" ";" 369 | "for" "(" init-statement condition-opt ";" expression-opt ")" statement 370 | "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 371 jump-statement → "break" ";" 372 | "continue" ";" 373 | "return" expr-or-braced-init-list-opt ";" 374 | coroutine-return-statement 375 | "goto" IDENTIFIER ";" 376 labeled-statement → attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | attribute-specifier-seq-opt "default" ":" statement 379 lambda-capture → capture-default 380 | capture-list 381 | capture-default "," capture-list 382 lambda-capture-opt → %empty 383 | lambda-capture 384 lambda-declarator → lambda-specifiers 385 | "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 386 lambda-expression → lambda-introducer lambda-declarator compound-statement 387 | lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → "[" lambda-capture-opt "]" 389 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 390 linkage-specification → "extern" string-literal "{" declaration-seq-opt "}" 391 | "extern" string-literal declaration 392 literal-operator-id → "operator" string-literal IDENTIFIER 393 | "operator" user-defined-string-literal 394 logical-and-expression → inclusive-or-expression 395 | logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → logical-and-expression 397 | logical-or-expression "||" logical-and-expression 398 mem-initializer → mem-initializer-id "(" expression-list-opt ")" 399 | mem-initializer-id braced-init-list 400 mem-initializer-id → class-or-decltype 401 | IDENTIFIER 402 mem-initializer-list → mem-initializer ELLIPSIS-opt 403 | mem-initializer-list "," mem-initializer ELLIPSIS-opt 404 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 405 | function-definition 406 | using-declaration 407 | using-enum-declaration 408 | static_assert-declaration 409 | template-declaration 410 | explicit-specialization 411 | deduction-guide 412 | alias-declaration 413 | opaque-enum-declaration 414 | empty-declaration 415 member-declarator → declarator virt-specifier-seq-opt pure-specifier-opt 416 | declarator requires-clause 417 | declarator brace-or-equal-initializer-opt 418 | IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 419 member-declarator-list → member-declarator 420 | member-declarator-list "," member-declarator 421 member-declarator-list-opt → %empty 422 | member-declarator-list 423 member-specification → member-declaration member-specification-opt 424 | access-specifier ":" member-specification-opt 425 member-specification-opt → %empty 426 | member-specification 427 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" 428 module-import-declaration → "import" module-name attribute-specifier-seq-opt ";" 429 | "import" module-partition attribute-specifier-seq-opt ";" 430 | "import" header-name attribute-specifier-seq-opt ";" 431 module-name → module-name-qualifier-opt IDENTIFIER 432 module-name-qualifier → IDENTIFIER "." 433 | module-name-qualifier IDENTIFIER "." 434 module-name-qualifier-opt → %empty 435 | module-name-qualifier 436 module-partition → ":" module-name-qualifier-opt IDENTIFIER 437 module-partition-opt → %empty 438 | module-partition 439 multiplicative-expression → pm-expression 440 | multiplicative-expression "*" pm-expression 441 | multiplicative-expression "/" pm-expression 442 | multiplicative-expression "%" pm-expression 443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → IDENTIFIER 445 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 446 namespace-body → declaration-seq-opt 447 namespace-definition → named-namespace-definition 448 | unnamed-namespace-definition 449 | nested-namespace-definition 450 namespace-name → IDENTIFIER 451 | namespace-alias 452 nested-name-specifier → "::" 453 | type-name "::" 454 | namespace-name "::" 455 | decltype-specifier "::" 456 | nested-name-specifier IDENTIFIER "::" 457 | nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → %empty 459 | nested-name-specifier 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 461 nested-requirement → "requires" constraint-expression ";" 462 new-declarator → ptr-operator new-declarator-opt 463 | noptr-new-declarator 464 new-declarator-opt → %empty 465 | new-declarator 466 new-expression → SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 468 new-initializer → "(" expression-list-opt ")" 469 | braced-init-list 470 new-initializer-opt → %empty 471 | new-initializer 472 new-placement → "(" expression-list ")" 473 new-placement-opt → %empty 474 | new-placement 475 new-type-id → type-specifier-seq new-declarator-opt 476 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator ";" 477 noexcept-expression → "noexcept" "(" expression ")" 478 noexcept-specifier → "noexcept" "(" constant-expression ")" 479 | "noexcept" 480 noexcept-specifier-opt → %empty 481 | noexcept-specifier 482 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers 483 | noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → %empty 486 | noptr-abstract-declarator 487 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator parameters-and-qualifiers 488 | noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | "..." 490 noptr-declarator → declarator-id attribute-specifier-seq-opt 491 | noptr-declarator parameters-and-qualifiers 492 | noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | "(" ptr-declarator ")" 494 noptr-new-declarator → "[" expression-opt "]" attribute-specifier-seq-opt 495 | noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 497 operator-function-id → "operator" overloadable-operator 498 | "operator" overloadable-operator "<" template-argument-list-opt ">" 499 overloadable-operator → "new" 500 | "delete" 501 | "new" "[" "]" 502 | "delete" "[" "]" 503 | "co_await" 504 | "(" ")" 505 | "[" "]" 506 | "->" 507 | "->*" 508 | "~" 509 | "!" 510 | "+" 511 | "-" 512 | "*" 513 | "/" 514 | "%" 515 | "^" 516 | "&" 517 | "|" 518 | "=" 519 | "+=" 520 | "-=" 521 | "*=" 522 | "/=" 523 | "%=" 524 | "^=" 525 | "&=" 526 | "|=" 527 | "==" 528 | "!=" 529 | "<" 530 | ">" 531 | "<=" 532 | ">=" 533 | "<=>" 534 | "&&" 535 | "||" 536 | "<<" 537 | ">>" 538 | "<<=" 539 | ">>=" 540 | "++" 541 | "--" 542 | "," 543 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → parameter-declaration-list-opt ELLIPSIS-opt 548 | parameter-declaration-list "," "..." 549 parameter-declaration-list → parameter-declaration 550 | parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → %empty 552 | parameter-declaration-list 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 554 placeholder-type-specifier → type-constraint-opt "auto" 555 | type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → cast-expression 557 | pm-expression ".*" cast-expression 558 | pm-expression "->*" cast-expression 559 postfix-expression → primary-expression 560 | postfix-expression "[" expression-list-opt "]" 561 | postfix-expression "(" expression-list-opt ")" 562 | simple-type-specifier "(" expression-list-opt ")" 563 | typename-specifier "(" expression-list-opt ")" 564 | simple-type-specifier braced-init-list 565 | typename-specifier braced-init-list 566 | postfix-expression "." TEMPLATE-opt id-expression 567 | postfix-expression "->" TEMPLATE-opt id-expression 568 | postfix-expression "++" 569 | postfix-expression "--" 570 | "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | "static_cast" "<" type-id ">" "(" expression ")" 572 | "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | "const_cast" "<" type-id ">" "(" expression ")" 574 | "typeid" "(" expression ")" 575 | "typeid" "(" type-id ")" 576 primary-expression → "literal" 577 | string-literal 578 | "this" 579 | "(" expression ")" 580 | id-expression 581 | lambda-expression 582 | fold-expression 583 | requires-expression 584 private-module-fragment → "module" ":" "private" ";" declaration-seq-opt 585 private-module-fragment-opt → %empty 586 | private-module-fragment 587 ptr-abstract-declarator → noptr-abstract-declarator 588 | ptr-operator ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → %empty 590 | ptr-abstract-declarator 591 ptr-declarator → noptr-declarator 592 | ptr-operator ptr-declarator 593 ptr-operator → "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | "&" attribute-specifier-seq-opt 595 | "&&" attribute-specifier-seq-opt 596 | nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 597 pure-specifier → "=" '0' 598 pure-specifier-opt → %empty 599 | pure-specifier 600 qualified-id → nested-name-specifier TEMPLATE-opt unqualified-id 601 qualified-namespace-specifier → nested-name-specifier-opt namespace-name 602 ref-qualifier → "&" 603 | "&&" 604 ref-qualifier-opt → %empty 605 | ref-qualifier 606 relational-expression → compare-expression 607 | relational-expression "<" compare-expression 608 | relational-expression ">" compare-expression 609 | relational-expression "<=" compare-expression 610 | relational-expression ">=" compare-expression 611 requirement → simple-requirement 612 | type-requirement 613 | compound-requirement 614 | nested-requirement 615 requirement-body → "{" requirement-seq "}" 616 requirement-parameter-list → "(" parameter-declaration-clause ")" 617 requirement-parameter-list-opt → %empty 618 | requirement-parameter-list 619 requirement-seq → requirement 620 | requirement-seq requirement 621 requires-clause → "requires" constraint-logical-or-expression 622 requires-clause-opt → %empty 623 | requires-clause 624 requires-expression → "requires" requirement-parameter-list-opt requirement-body 625 return-type-requirement → "->" type-constraint 626 return-type-requirement-opt → %empty 627 | return-type-requirement 628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement 629 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 630 | "if" NOT-opt "consteval" compound-statement 631 | "if" NOT-opt "consteval" compound-statement "else" statement 632 | "switch" "(" init-statement-opt condition ")" statement 633 shift-expression → additive-expression 634 | shift-expression "<<" additive-expression 635 | shift-expression ">>" additive-expression 636 simple-capture → IDENTIFIER ELLIPSIS-opt 637 | "&" IDENTIFIER ELLIPSIS-opt 638 | "this" 639 | "*" "this" 640 simple-declaration → decl-specifier-seq init-declarator-list-opt ";" 641 | attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 643 simple-requirement → expression ";" 644 simple-template-id → template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → nested-name-specifier-opt type-name 646 | nested-name-specifier "template" simple-template-id 647 | decltype-specifier 648 | placeholder-type-specifier 649 | nested-name-specifier-opt template-name 650 | "char" 651 | "char8_t" 652 | "char16_t" 653 | "char32_t" 654 | "wchar_t" 655 | "bool" 656 | "short" 657 | "int" 658 | "long" 659 | "signed" 660 | "unsigned" 661 | "float" 662 | "double" 663 | "void" 664 statement → labeled-statement 665 | attribute-specifier-seq-opt expression-statement 666 | attribute-specifier-seq-opt compound-statement 667 | attribute-specifier-seq-opt selection-statement 668 | attribute-specifier-seq-opt iteration-statement 669 | attribute-specifier-seq-opt jump-statement 670 | declaration-statement 671 | attribute-specifier-seq-opt try-block 672 statement-seq → statement 673 | statement-seq statement 674 statement-seq-opt → %empty 675 | statement-seq 676 static_assert-declaration → "static_assert" "(" constant-expression ")" ";" 677 | "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → "static" 679 | "thread_local" 680 | "extern" 681 | "mutable" 682 string-literal → STRING_LITERAL 683 template-argument → constant-expression 684 | type-id 685 | id-expression 686 template-argument-list → template-argument ELLIPSIS-opt 687 | template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → %empty 689 | template-argument-list 690 template-declaration → template-head declaration 691 | template-head concept-definition 692 template-head → "template" "<" template-parameter-list ">" requires-clause-opt 693 template-id → simple-template-id 694 | operator-function-id "<" template-argument-list-opt ">" 695 | literal-operator-id "<" template-argument-list-opt ">" 696 template-name → IDENTIFIER 697 template-parameter → type-parameter 698 | parameter-declaration 699 template-parameter-list → template-parameter 700 | template-parameter-list "," template-parameter 701 throw-expression → "throw" assignment-expression-opt 702 trailing-return-type → "->" type-id 703 trailing-return-type-opt → %empty 704 | trailing-return-type 705 translation-unit → declaration-seq-opt 706 | global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt 707 try-block → "try" compound-statement handler-seq 708 type-constraint → nested-name-specifier-opt concept-name 709 | nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → %empty 711 | type-constraint 712 type-id → type-specifier-seq abstract-declarator-opt 713 type-name → class-name 714 | enum-name 715 | typedef-name 716 type-parameter → type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | type-parameter-key IDENTIFIER-opt "=" type-id 718 | type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | type-constraint IDENTIFIER-opt "=" type-id 720 | template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → "class" 723 | "typename" 724 type-requirement → "typename" nested-name-specifier-opt type-name ";" 725 type-specifier → simple-type-specifier 726 | elaborated-type-specifier 727 | typename-specifier 728 | cv-qualifier 729 type-specifier-seq → type-specifier attribute-specifier-seq-opt 730 | type-specifier type-specifier-seq 731 typedef-name → IDENTIFIER 732 | simple-template-id 733 typename-specifier → "typename" nested-name-specifier IDENTIFIER 734 | "typename" nested-name-specifier TEMPLATE-opt simple-template-id 735 ud-suffix → IDENTIFIER 736 unary-expression → postfix-expression 737 | unary-operator cast-expression 738 | "++" cast-expression 739 | "--" cast-expression 740 | await-expression 741 | "sizeof" unary-expression 742 | "sizeof" "(" type-id ")" 743 | "sizeof" "..." "(" IDENTIFIER ")" 744 | "alignof" "(" type-id ")" 745 | noexcept-expression 746 | new-expression 747 | delete-expression 748 unary-operator → "*" 749 | "&" 750 | "+" 751 | "-" 752 | "!" 753 | "~" 754 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 755 unqualified-id → IDENTIFIER 756 | operator-function-id 757 | conversion-function-id 758 | literal-operator-id 759 | "~" type-name 760 | "~" decltype-specifier 761 | template-id 762 user-defined-string-literal → string-literal ud-suffix 763 using-declaration → "using" using-declarator-list ";" 764 using-declarator → TYPENAME-opt nested-name-specifier unqualified-id 765 using-declarator-list → using-declarator ELLIPSIS-opt 766 | using-declarator-list "," using-declarator ELLIPSIS-opt 767 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → "using" elaborated-enum-specifier ";" 769 virt-specifier → "override" 770 | "final" 771 virt-specifier-seq → virt-specifier 772 | virt-specifier-seq virt-specifier 773 virt-specifier-seq-opt → %empty 774 | virt-specifier-seq 775 yield-expression → "co_yield" assignment-expression 776 | "co_yield" braced-init-list
0 $accept → • translation-unit $end 9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty [$end] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 332 global-module-fragment → • "module" ";" declaration-seq-opt 333 global-module-fragment-opt → • %empty ["export", "module"] 334 | • global-module-fragment 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 705 translation-unit → • declaration-seq-opt 706 | • global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "module" shift, and go to state 24 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 208 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 333 (global-module-fragment-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" [reduce using rule 333 (global-module-fragment-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 62 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 global-module-fragment go to state 80 global-module-fragment-opt go to state 81 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 translation-unit go to state 103 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
185 decl-specifier → "constexpr" • $default reduce using rule 185 (decl-specifier)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 270 | "export" • declaration 271 | • "export" "{" declaration-seq-opt "}" 271 | "export" • "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 272 | "export" • module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "{" shift, and go to state 114 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 115 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 116 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
10 EXTERN-opt → "extern" • ["template"] 390 linkage-specification → "extern" • string-literal "{" declaration-seq-opt "}" 391 | "extern" • string-literal declaration 680 storage-class-specifier → "extern" • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 682 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 117 "template" reduce using rule 10 (EXTERN-opt) $default reduce using rule 680 (storage-class-specifier) string-literal go to state 118
137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "<" reduce using rule 696 (template-name) $default reduce using rule 137 (class-name)
14 INLINE-opt → "inline" • ["namespace"] 188 decl-specifier → "inline" • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "namespace" reduce using rule 14 (INLINE-opt) $default reduce using rule 188 (decl-specifier)
452 nested-name-specifier → "::" • $default reduce using rule 452 (nested-name-specifier)
265 explicit-specialization → "template" • "<" ">" declaration 692 template-head → "template" • "<" template-parameter-list ">" requires-clause-opt "<" shift, and go to state 119
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → "typename" • nested-name-specifier IDENTIFIER 734 | "typename" • nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 121 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
329 function-specifier → "virtual" • $default reduce using rule 329 (function-specifier)
25 TYPENAME-opt → • %empty [IDENTIFIER, "::", "decltype"] 26 | • "typename" 44 alias-declaration → "using" • IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 763 using-declaration → "using" • using-declarator-list ";" 764 using-declarator → • TYPENAME-opt nested-name-specifier unqualified-id 765 using-declarator-list → • using-declarator ELLIPSIS-opt 766 | • using-declarator-list "," using-declarator ELLIPSIS-opt 768 using-enum-declaration → "using" • elaborated-enum-specifier ";" IDENTIFIER shift, and go to state 122 "typename" shift, and go to state 123 "enum" shift, and go to state 124 IDENTIFIER [reduce using rule 25 (TYPENAME-opt)] $default reduce using rule 25 (TYPENAME-opt) TYPENAME-opt go to state 125 elaborated-enum-specifier go to state 126 using-declarator go to state 127 using-declarator-list go to state 128
233 empty-declaration → ";" • $default reduce using rule 233 (empty-declaration)
134 class-key → "class" • $default reduce using rule 134 (class-key)
135 class-key → "struct" • $default reduce using rule 135 (class-key)
136 class-key → "union" • $default reduce using rule 136 (class-key)
175 cv-qualifier → "const" • $default reduce using rule 175 (cv-qualifier)
176 cv-qualifier → "volatile" • $default reduce using rule 176 (cv-qualifier)
183 decl-specifier → "friend" • $default reduce using rule 183 (decl-specifier)
184 decl-specifier → "typedef" • $default reduce using rule 184 (decl-specifier)
186 decl-specifier → "consteval" • $default reduce using rule 186 (decl-specifier)
187 decl-specifier → "constinit" • $default reduce using rule 187 (decl-specifier)
214 decltype-specifier → "decltype" • "(" expression ")" "(" shift, and go to state 129
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → "enum" • nested-name-specifier-opt IDENTIFIER 243 enum-key → "enum" • [IDENTIFIER, "::", "alignas", "[", ":", "{", "decltype"] 244 | "enum" • "class" 245 | "enum" • "struct" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "class" shift, and go to state 130 "struct" shift, and go to state 131 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 243 (enum-key)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 243 (enum-key)] "decltype" [reduce using rule 243 (enum-key)] $default reduce using rule 243 (enum-key) class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 133 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
266 explicit-specifier → "explicit" • "(" constant-expression ")" 267 | "explicit" • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", ">", "explicit", "*", "requires", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 134 "(" [reduce using rule 267 (explicit-specifier)] $default reduce using rule 267 (explicit-specifier)
332 global-module-fragment → "module" • ";" declaration-seq-opt ";" shift, and go to state 135
339 header-name → • HEADER_NAME 428 module-import-declaration → "import" • module-name attribute-specifier-seq-opt ";" 429 | "import" • module-partition attribute-specifier-seq-opt ";" 430 | "import" • header-name attribute-specifier-seq-opt ";" 431 module-name → • module-name-qualifier-opt IDENTIFIER 432 module-name-qualifier → • IDENTIFIER "." 433 | • module-name-qualifier IDENTIFIER "." 434 module-name-qualifier-opt → • %empty [IDENTIFIER] 435 | • module-name-qualifier 436 module-partition → • ":" module-name-qualifier-opt IDENTIFIER IDENTIFIER shift, and go to state 136 ":" shift, and go to state 137 HEADER_NAME shift, and go to state 138 IDENTIFIER [reduce using rule 434 (module-name-qualifier-opt)] header-name go to state 139 module-name go to state 140 module-name-qualifier go to state 141 module-name-qualifier-opt go to state 142 module-partition go to state 143
234 enclosing-namespace-specifier → • IDENTIFIER 235 | • enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER 445 namespace-alias-definition → "namespace" • IDENTIFIER "=" qualified-namespace-specifier ";" 460 nested-namespace-definition → "namespace" • enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" IDENTIFIER shift, and go to state 144 enclosing-namespace-specifier go to state 145
650 simple-type-specifier → "char" • $default reduce using rule 650 (simple-type-specifier)
651 simple-type-specifier → "char8_t" • $default reduce using rule 651 (simple-type-specifier)
652 simple-type-specifier → "char16_t" • $default reduce using rule 652 (simple-type-specifier)
653 simple-type-specifier → "char32_t" • $default reduce using rule 653 (simple-type-specifier)
654 simple-type-specifier → "wchar_t" • $default reduce using rule 654 (simple-type-specifier)
655 simple-type-specifier → "bool" • $default reduce using rule 655 (simple-type-specifier)
656 simple-type-specifier → "short" • $default reduce using rule 656 (simple-type-specifier)
657 simple-type-specifier → "int" • $default reduce using rule 657 (simple-type-specifier)
658 simple-type-specifier → "long" • $default reduce using rule 658 (simple-type-specifier)
659 simple-type-specifier → "signed" • $default reduce using rule 659 (simple-type-specifier)
660 simple-type-specifier → "unsigned" • $default reduce using rule 660 (simple-type-specifier)
661 simple-type-specifier → "float" • $default reduce using rule 661 (simple-type-specifier)
662 simple-type-specifier → "double" • $default reduce using rule 662 (simple-type-specifier)
663 simple-type-specifier → "void" • $default reduce using rule 663 (simple-type-specifier)
676 static_assert-declaration → "static_assert" • "(" constant-expression ")" ";" 677 | "static_assert" • "(" constant-expression "," string-literal ")" ";" "(" shift, and go to state 146
678 storage-class-specifier → "static" • $default reduce using rule 678 (storage-class-specifier)
679 storage-class-specifier → "thread_local" • $default reduce using rule 679 (storage-class-specifier)
681 storage-class-specifier → "mutable" • $default reduce using rule 681 (storage-class-specifier)
264 explicit-instantiation → EXTERN-opt • "template" declaration "template" shift, and go to state 147
443 named-namespace-definition → INLINE-opt • "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 754 unnamed-namespace-definition → INLINE-opt • "namespace" attribute-specifier-seq-opt "{" namespace-body "}" "namespace" shift, and go to state 148
114 block-declaration → alias-declaration • $default reduce using rule 114 (block-declaration)
108 block-declaration → asm-declaration • $default reduce using rule 108 (block-declaration)
204 declaration → attribute-declaration • $default reduce using rule 204 (declaration)
71 attribute-declaration → attribute-specifier-seq • ";" 84 attribute-specifier-seq-opt → attribute-specifier-seq • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 641 simple-declaration → attribute-specifier-seq • decl-specifier-seq init-declarator-list ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 ";" shift, and go to state 151 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 84 (attribute-specifier-seq-opt)] "extern" [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 84 (attribute-specifier-seq-opt)] "::" [reduce using rule 84 (attribute-specifier-seq-opt)] "typename" [reduce using rule 84 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 84 (attribute-specifier-seq-opt)] "class" [reduce using rule 84 (attribute-specifier-seq-opt)] "struct" [reduce using rule 84 (attribute-specifier-seq-opt)] "union" [reduce using rule 84 (attribute-specifier-seq-opt)] "const" [reduce using rule 84 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 84 (attribute-specifier-seq-opt)] "friend" [reduce using rule 84 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 84 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 84 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 84 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 84 (attribute-specifier-seq-opt)] "auto" reduce using rule 84 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 84 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "bool" [reduce using rule 84 (attribute-specifier-seq-opt)] "short" [reduce using rule 84 (attribute-specifier-seq-opt)] "int" [reduce using rule 84 (attribute-specifier-seq-opt)] "long" [reduce using rule 84 (attribute-specifier-seq-opt)] "signed" [reduce using rule 84 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 84 (attribute-specifier-seq-opt)] "float" [reduce using rule 84 (attribute-specifier-seq-opt)] "double" [reduce using rule 84 (attribute-specifier-seq-opt)] "void" [reduce using rule 84 (attribute-specifier-seq-opt)] "static" [reduce using rule 84 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 84 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 84 (attribute-specifier-seq-opt)] $default reduce using rule 84 (attribute-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 152 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 49 asm-declaration → attribute-specifier-seq-opt • "asm" "(" string-literal ")" ";" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "(", "&", "&&", "operator", "decltype", "*", "~"] 192 | • decl-specifier-seq 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 327 function-definition → attribute-specifier-seq-opt • decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt • decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 476 nodeclspec-function-declaration → attribute-specifier-seq-opt • declarator ";" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 642 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 767 using-directive → attribute-specifier-seq-opt • "using" "namespace" nested-name-specifier-opt namespace-name ";" "constexpr" shift, and go to state 1 "..." shift, and go to state 155 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 156 "alignas" shift, and go to state 157 "(" shift, and go to state 158 "&" shift, and go to state 159 "asm" shift, and go to state 160 "[" shift, and go to state 161 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "&&" shift, and go to state 162 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 163 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "..." [reduce using rule 191 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] IDENTIFIER [reduce using rule 191 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 191 (decl-specifier-seq-opt)] "(" [reduce using rule 191 (decl-specifier-seq-opt)] "&" [reduce using rule 191 (decl-specifier-seq-opt)] "&&" [reduce using rule 191 (decl-specifier-seq-opt)] "operator" reduce using rule 5 (ELLIPSIS-opt) "operator" [reduce using rule 191 (decl-specifier-seq-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 191 (decl-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "*" [reduce using rule 191 (decl-specifier-seq-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) "~" [reduce using rule 191 (decl-specifier-seq-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 alignment-specifier go to state 165 attribute-specifier go to state 166 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 167 decl-specifier-seq-opt go to state 168 declarator go to state 169 declarator-id go to state 170 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 171 nested-name-specifier-opt go to state 90 noptr-declarator go to state 172 placeholder-type-specifier go to state 94 ptr-declarator go to state 173 ptr-operator go to state 174 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
193 declaration → block-declaration • $default reduce using rule 193 (declaration)
142 class-specifier → class-head • "{" member-specification-opt "}" "{" shift, and go to state 175
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "alignas", "[", ":", "{", "decltype"] 84 | • attribute-specifier-seq 131 class-head → class-key • attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | class-key • attribute-specifier-seq-opt base-clause-opt 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 229 elaborated-type-specifier → class-key • attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | class-key • simple-template-id 231 | class-key • nested-name-specifier TEMPLATE-opt simple-template-id 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 177 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 178 simple-template-id go to state 179 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
713 type-name → class-name • $default reduce using rule 713 (type-name)
218 defining-type-specifier → class-specifier • $default reduce using rule 218 (defining-type-specifier)
728 type-specifier → cv-qualifier • $default reduce using rule 728 (type-specifier)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [",", "...", IDENTIFIER, "noexcept", "::", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "&&", "operator", "decltype", "->", ">", "*", "requires", "~"] 84 | • attribute-specifier-seq 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 189 | decl-specifier • attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 190 | decl-specifier • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 180 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 181 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 348 init-declarator → • declarator initializer-opt 349 | • declarator requires-clause 350 init-declarator-list → • init-declarator 351 | • init-declarator-list "," init-declarator 352 init-declarator-list-opt → • %empty [";"] 353 | • init-declarator-list 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 640 simple-declaration → decl-specifier-seq • init-declarator-list-opt ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] ";" reduce using rule 352 (init-declarator-list-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator go to state 182 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 init-declarator go to state 183 init-declarator-list go to state 184 init-declarator-list-opt go to state 185 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 172 ptr-declarator go to state 173 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
206 declaration-seq → declaration • $default reduce using rule 206 (declaration-seq)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 207 declaration-seq → declaration-seq • declaration 209 declaration-seq-opt → declaration-seq • [$end, "export", "}", "module"] 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 209 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 209 (declaration-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 209 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 209 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 187 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
705 translation-unit → declaration-seq-opt • $default reduce using rule 705 (translation-unit)
455 nested-name-specifier → decltype-specifier • "::" 647 simple-type-specifier → decltype-specifier • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 188 "::" [reduce using rule 647 (simple-type-specifier)] $default reduce using rule 647 (simple-type-specifier)
197 declaration → deduction-guide • $default reduce using rule 197 (declaration)
181 decl-specifier → defining-type-specifier • $default reduce using rule 181 (decl-specifier)
232 elaborated-type-specifier → elaborated-enum-specifier • $default reduce using rule 232 (elaborated-type-specifier)
726 type-specifier → elaborated-type-specifier • $default reduce using rule 726 (type-specifier)
203 declaration → empty-declaration • $default reduce using rule 203 (declaration)
247 enum-specifier → enum-head • "{" enumerator-list-opt "}" 248 | enum-head • "{" enumerator-list "," "}" "{" shift, and go to state 189
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 239 enum-head → enum-key • attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 496 opaque-enum-declaration → enum-key • attribute-specifier-seq-opt enum-head-name enum-base-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 190
714 type-name → enum-name • $default reduce using rule 714 (type-name)
219 defining-type-specifier → enum-specifier • $default reduce using rule 219 (defining-type-specifier)
198 declaration → explicit-instantiation • $default reduce using rule 198 (declaration)
199 declaration → explicit-specialization • $default reduce using rule 199 (declaration)
269 explicit-specifier-opt → explicit-specifier • [IDENTIFIER] 330 function-specifier → explicit-specifier • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] IDENTIFIER reduce using rule 269 (explicit-specifier-opt) IDENTIFIER [reduce using rule 330 (function-specifier)] $default reduce using rule 330 (function-specifier)
215 deduction-guide → explicit-specifier-opt • template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 191 template-name go to state 192
200 declaration → export-declaration • $default reduce using rule 200 (declaration)
195 declaration → function-definition • $default reduce using rule 195 (declaration)
182 decl-specifier → function-specifier • $default reduce using rule 182 (decl-specifier)
334 global-module-fragment-opt → global-module-fragment • $default reduce using rule 334 (global-module-fragment-opt)
7 EXPORT-opt → • %empty ["module"] 8 | • "export" 427 module-declaration → • EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" 706 translation-unit → global-module-fragment-opt • module-declaration declaration-seq-opt private-module-fragment-opt "export" shift, and go to state 193 $default reduce using rule 7 (EXPORT-opt) EXPORT-opt go to state 194 module-declaration go to state 195
201 declaration → linkage-specification • $default reduce using rule 201 (declaration)
205 declaration → module-import-declaration • $default reduce using rule 205 (declaration)
447 namespace-definition → named-namespace-definition • $default reduce using rule 447 (namespace-definition)
451 namespace-name → namespace-alias • $default reduce using rule 451 (namespace-name)
109 block-declaration → namespace-alias-definition • $default reduce using rule 109 (block-declaration)
202 declaration → namespace-definition • $default reduce using rule 202 (declaration)
454 nested-name-specifier → namespace-name • "::" "::" shift, and go to state 196
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 646 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 197 "template" shift, and go to state 198 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 199
137 class-name → • IDENTIFIER 138 | • simple-template-id 151 concept-name → • IDENTIFIER 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → nested-name-specifier-opt • type-name 649 | nested-name-specifier-opt • template-name 696 template-name → • IDENTIFIER 708 type-constraint → nested-name-specifier-opt • concept-name 709 | nested-name-specifier-opt • concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 200 class-name go to state 55 concept-name go to state 201 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 202 type-name go to state 203 typedef-name go to state 108
449 namespace-definition → nested-namespace-definition • $default reduce using rule 449 (namespace-definition)
194 declaration → nodeclspec-function-declaration • $default reduce using rule 194 (declaration)
115 block-declaration → opaque-enum-declaration • $default reduce using rule 115 (block-declaration)
648 simple-type-specifier → placeholder-type-specifier • $default reduce using rule 648 (simple-type-specifier)
107 block-declaration → simple-declaration • $default reduce using rule 107 (block-declaration)
138 class-name → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 732 typedef-name → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 138 (class-name) "," [reduce using rule 732 (typedef-name)] "constexpr" reduce using rule 138 (class-name) "constexpr" [reduce using rule 732 (typedef-name)] "..." reduce using rule 138 (class-name) "..." [reduce using rule 732 (typedef-name)] "export" reduce using rule 138 (class-name) "export" [reduce using rule 732 (typedef-name)] "extern" reduce using rule 138 (class-name) "extern" [reduce using rule 732 (typedef-name)] IDENTIFIER reduce using rule 138 (class-name) IDENTIFIER [reduce using rule 732 (typedef-name)] "inline" reduce using rule 138 (class-name) "inline" [reduce using rule 732 (typedef-name)] "noexcept" reduce using rule 138 (class-name) "noexcept" [reduce using rule 732 (typedef-name)] "::" reduce using rule 138 (class-name) "::" [reduce using rule 732 (typedef-name)] "template" reduce using rule 138 (class-name) "template" [reduce using rule 732 (typedef-name)] "typename" reduce using rule 138 (class-name) "typename" [reduce using rule 732 (typedef-name)] "virtual" reduce using rule 138 (class-name) "virtual" [reduce using rule 732 (typedef-name)] "+" reduce using rule 138 (class-name) "+" [reduce using rule 732 (typedef-name)] "-" reduce using rule 138 (class-name) "-" [reduce using rule 732 (typedef-name)] "using" reduce using rule 138 (class-name) "using" [reduce using rule 732 (typedef-name)] "=" reduce using rule 138 (class-name) "=" [reduce using rule 732 (typedef-name)] ";" reduce using rule 138 (class-name) ";" [reduce using rule 732 (typedef-name)] "alignas" reduce using rule 138 (class-name) "alignas" [reduce using rule 732 (typedef-name)] "(" reduce using rule 138 (class-name) "(" [reduce using rule 732 (typedef-name)] ")" reduce using rule 138 (class-name) ")" [reduce using rule 732 (typedef-name)] "&" reduce using rule 138 (class-name) "&" [reduce using rule 732 (typedef-name)] "asm" reduce using rule 138 (class-name) "asm" [reduce using rule 732 (typedef-name)] "*=" reduce using rule 138 (class-name) "*=" [reduce using rule 732 (typedef-name)] "/=" reduce using rule 138 (class-name) "/=" [reduce using rule 732 (typedef-name)] "%=" reduce using rule 138 (class-name) "%=" [reduce using rule 732 (typedef-name)] "+=" reduce using rule 138 (class-name) "+=" [reduce using rule 732 (typedef-name)] "-=" reduce using rule 138 (class-name) "-=" [reduce using rule 732 (typedef-name)] ">>=" reduce using rule 138 (class-name) ">>=" [reduce using rule 732 (typedef-name)] "<<=" reduce using rule 138 (class-name) "<<=" [reduce using rule 732 (typedef-name)] "&=" reduce using rule 138 (class-name) "&=" [reduce using rule 732 (typedef-name)] "^=" reduce using rule 138 (class-name) "^=" [reduce using rule 732 (typedef-name)] "|=" reduce using rule 138 (class-name) "|=" [reduce using rule 732 (typedef-name)] "[" reduce using rule 138 (class-name) "[" [reduce using rule 732 (typedef-name)] "]" reduce using rule 138 (class-name) "]" [reduce using rule 732 (typedef-name)] ":" reduce using rule 138 (class-name) ":" [reduce using rule 732 (typedef-name)] "{" reduce using rule 138 (class-name) "{" [reduce using rule 732 (typedef-name)] "}" reduce using rule 138 (class-name) "}" [reduce using rule 732 (typedef-name)] "class" reduce using rule 138 (class-name) "class" [reduce using rule 732 (typedef-name)] "struct" reduce using rule 138 (class-name) "struct" [reduce using rule 732 (typedef-name)] "union" reduce using rule 138 (class-name) "union" [reduce using rule 732 (typedef-name)] "final" reduce using rule 138 (class-name) "final" [reduce using rule 732 (typedef-name)] "<=>" reduce using rule 138 (class-name) "<=>" [reduce using rule 732 (typedef-name)] "concept" reduce using rule 138 (class-name) "concept" [reduce using rule 732 (typedef-name)] "?" reduce using rule 138 (class-name) "?" [reduce using rule 732 (typedef-name)] "&&" reduce using rule 138 (class-name) "&&" [reduce using rule 732 (typedef-name)] "||" reduce using rule 138 (class-name) "||" [reduce using rule 732 (typedef-name)] "operator" reduce using rule 138 (class-name) "operator" [reduce using rule 732 (typedef-name)] "const" reduce using rule 138 (class-name) "const" [reduce using rule 732 (typedef-name)] "volatile" reduce using rule 138 (class-name) "volatile" [reduce using rule 732 (typedef-name)] "friend" reduce using rule 138 (class-name) "friend" [reduce using rule 732 (typedef-name)] "typedef" reduce using rule 138 (class-name) "typedef" [reduce using rule 732 (typedef-name)] "consteval" reduce using rule 138 (class-name) "consteval" [reduce using rule 732 (typedef-name)] "constinit" reduce using rule 138 (class-name) "constinit" [reduce using rule 732 (typedef-name)] "decltype" reduce using rule 138 (class-name) "decltype" [reduce using rule 732 (typedef-name)] "->" reduce using rule 138 (class-name) "->" [reduce using rule 732 (typedef-name)] "." reduce using rule 138 (class-name) "." [reduce using rule 732 (typedef-name)] "enum" reduce using rule 138 (class-name) "enum" [reduce using rule 732 (typedef-name)] "==" reduce using rule 138 (class-name) "==" [reduce using rule 732 (typedef-name)] "!=" reduce using rule 138 (class-name) "!=" [reduce using rule 732 (typedef-name)] "^" reduce using rule 138 (class-name) "^" [reduce using rule 732 (typedef-name)] "<" reduce using rule 138 (class-name) "<" [reduce using rule 732 (typedef-name)] ">" reduce using rule 138 (class-name) ">" [reduce using rule 732 (typedef-name)] "explicit" reduce using rule 138 (class-name) "explicit" [reduce using rule 732 (typedef-name)] "*" reduce using rule 138 (class-name) "*" [reduce using rule 732 (typedef-name)] "/" reduce using rule 138 (class-name) "/" [reduce using rule 732 (typedef-name)] "%" reduce using rule 138 (class-name) "%" [reduce using rule 732 (typedef-name)] "|" reduce using rule 138 (class-name) "|" [reduce using rule 732 (typedef-name)] "<<" reduce using rule 138 (class-name) "<<" [reduce using rule 732 (typedef-name)] ">>" reduce using rule 138 (class-name) ">>" [reduce using rule 732 (typedef-name)] "<=" reduce using rule 138 (class-name) "<=" [reduce using rule 732 (typedef-name)] ">=" reduce using rule 138 (class-name) ">=" [reduce using rule 732 (typedef-name)] ".*" reduce using rule 138 (class-name) ".*" [reduce using rule 732 (typedef-name)] "->*" reduce using rule 138 (class-name) "->*" [reduce using rule 732 (typedef-name)] "try" reduce using rule 138 (class-name) "try" [reduce using rule 732 (typedef-name)] "import" reduce using rule 138 (class-name) "import" [reduce using rule 732 (typedef-name)] "namespace" reduce using rule 138 (class-name) "namespace" [reduce using rule 732 (typedef-name)] "requires" reduce using rule 138 (class-name) "requires" [reduce using rule 732 (typedef-name)] "~" reduce using rule 138 (class-name) "~" [reduce using rule 732 (typedef-name)] "++" reduce using rule 138 (class-name) "++" [reduce using rule 732 (typedef-name)] "--" reduce using rule 138 (class-name) "--" [reduce using rule 732 (typedef-name)] "auto" reduce using rule 138 (class-name) "auto" [reduce using rule 732 (typedef-name)] "char" reduce using rule 138 (class-name) "char" [reduce using rule 732 (typedef-name)] "char8_t" reduce using rule 138 (class-name) "char8_t" [reduce using rule 732 (typedef-name)] "char16_t" reduce using rule 138 (class-name) "char16_t" [reduce using rule 732 (typedef-name)] "char32_t" reduce using rule 138 (class-name) "char32_t" [reduce using rule 732 (typedef-name)] "wchar_t" reduce using rule 138 (class-name) "wchar_t" [reduce using rule 732 (typedef-name)] "bool" reduce using rule 138 (class-name) "bool" [reduce using rule 732 (typedef-name)] "short" reduce using rule 138 (class-name) "short" [reduce using rule 732 (typedef-name)] "int" reduce using rule 138 (class-name) "int" [reduce using rule 732 (typedef-name)] "long" reduce using rule 138 (class-name) "long" [reduce using rule 732 (typedef-name)] "signed" reduce using rule 138 (class-name) "signed" [reduce using rule 732 (typedef-name)] "unsigned" reduce using rule 138 (class-name) "unsigned" [reduce using rule 732 (typedef-name)] "float" reduce using rule 138 (class-name) "float" [reduce using rule 732 (typedef-name)] "double" reduce using rule 138 (class-name) "double" [reduce using rule 732 (typedef-name)] "void" reduce using rule 138 (class-name) "void" [reduce using rule 732 (typedef-name)] "static_assert" reduce using rule 138 (class-name) "static_assert" [reduce using rule 732 (typedef-name)] "static" reduce using rule 138 (class-name) "static" [reduce using rule 732 (typedef-name)] "thread_local" reduce using rule 138 (class-name) "thread_local" [reduce using rule 732 (typedef-name)] "mutable" reduce using rule 138 (class-name) "mutable" [reduce using rule 732 (typedef-name)] "override" reduce using rule 138 (class-name) "override" [reduce using rule 732 (typedef-name)] $default reduce using rule 138 (class-name)
725 type-specifier → simple-type-specifier • $default reduce using rule 725 (type-specifier)
113 block-declaration → static_assert-declaration • $default reduce using rule 113 (block-declaration)
180 decl-specifier → storage-class-specifier • $default reduce using rule 180 (decl-specifier)
196 declaration → template-declaration • $default reduce using rule 196 (declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 150 concept-definition → • "concept" concept-name "=" constraint-expression ";" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 690 | template-head • declaration 691 | • template-head concept-definition 691 | template-head • concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "concept" shift, and go to state 204 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 concept-definition go to state 205 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 206 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
644 simple-template-id → template-name • "<" template-argument-list-opt ">" "<" shift, and go to state 207
0 $accept → translation-unit • $end $end shift, and go to state 208
711 type-constraint-opt → type-constraint • $default reduce using rule 711 (type-constraint-opt)
554 placeholder-type-specifier → type-constraint-opt • "auto" 555 | type-constraint-opt • "decltype" "(" "auto" ")" "decltype" shift, and go to state 209 "auto" shift, and go to state 210
453 nested-name-specifier → type-name • "::" "::" shift, and go to state 211
217 defining-type-specifier → type-specifier • $default reduce using rule 217 (defining-type-specifier)
715 type-name → typedef-name • $default reduce using rule 715 (type-name)
727 type-specifier → typename-specifier • $default reduce using rule 727 (type-specifier)
448 namespace-definition → unnamed-namespace-definition • $default reduce using rule 448 (namespace-definition)
110 block-declaration → using-declaration • $default reduce using rule 110 (block-declaration)
112 block-declaration → using-directive • $default reduce using rule 112 (block-declaration)
111 block-declaration → using-enum-declaration • $default reduce using rule 111 (block-declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 271 | "export" "{" • declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 212 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
270 export-declaration → "export" declaration • $default reduce using rule 270 (export-declaration)
205 declaration → module-import-declaration • [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "private", "protected", "public", "using", ";", "alignas", "(", "&", "asm", "[", ":", "}", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "module", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] 272 export-declaration → "export" module-import-declaration • [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "private", "protected", "public", "using", ";", "alignas", "(", "&", "asm", "[", ":", "}", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "module", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] $end reduce using rule 205 (declaration) $end [reduce using rule 272 (export-declaration)] "constexpr" reduce using rule 205 (declaration) "constexpr" [reduce using rule 272 (export-declaration)] "..." reduce using rule 205 (declaration) "..." [reduce using rule 272 (export-declaration)] "export" reduce using rule 205 (declaration) "export" [reduce using rule 272 (export-declaration)] "extern" reduce using rule 205 (declaration) "extern" [reduce using rule 272 (export-declaration)] IDENTIFIER reduce using rule 205 (declaration) IDENTIFIER [reduce using rule 272 (export-declaration)] "inline" reduce using rule 205 (declaration) "inline" [reduce using rule 272 (export-declaration)] "::" reduce using rule 205 (declaration) "::" [reduce using rule 272 (export-declaration)] "template" reduce using rule 205 (declaration) "template" [reduce using rule 272 (export-declaration)] "typename" reduce using rule 205 (declaration) "typename" [reduce using rule 272 (export-declaration)] "virtual" reduce using rule 205 (declaration) "virtual" [reduce using rule 272 (export-declaration)] "private" reduce using rule 205 (declaration) "private" [reduce using rule 272 (export-declaration)] "protected" reduce using rule 205 (declaration) "protected" [reduce using rule 272 (export-declaration)] "public" reduce using rule 205 (declaration) "public" [reduce using rule 272 (export-declaration)] "using" reduce using rule 205 (declaration) "using" [reduce using rule 272 (export-declaration)] ";" reduce using rule 205 (declaration) ";" [reduce using rule 272 (export-declaration)] "alignas" reduce using rule 205 (declaration) "alignas" [reduce using rule 272 (export-declaration)] "(" reduce using rule 205 (declaration) "(" [reduce using rule 272 (export-declaration)] "&" reduce using rule 205 (declaration) "&" [reduce using rule 272 (export-declaration)] "asm" reduce using rule 205 (declaration) "asm" [reduce using rule 272 (export-declaration)] "[" reduce using rule 205 (declaration) "[" [reduce using rule 272 (export-declaration)] ":" reduce using rule 205 (declaration) ":" [reduce using rule 272 (export-declaration)] "}" reduce using rule 205 (declaration) "}" [reduce using rule 272 (export-declaration)] "class" reduce using rule 205 (declaration) "class" [reduce using rule 272 (export-declaration)] "struct" reduce using rule 205 (declaration) "struct" [reduce using rule 272 (export-declaration)] "union" reduce using rule 205 (declaration) "union" [reduce using rule 272 (export-declaration)] "&&" reduce using rule 205 (declaration) "&&" [reduce using rule 272 (export-declaration)] "operator" reduce using rule 205 (declaration) "operator" [reduce using rule 272 (export-declaration)] "const" reduce using rule 205 (declaration) "const" [reduce using rule 272 (export-declaration)] "volatile" reduce using rule 205 (declaration) "volatile" [reduce using rule 272 (export-declaration)] "friend" reduce using rule 205 (declaration) "friend" [reduce using rule 272 (export-declaration)] "typedef" reduce using rule 205 (declaration) "typedef" [reduce using rule 272 (export-declaration)] "consteval" reduce using rule 205 (declaration) "consteval" [reduce using rule 272 (export-declaration)] "constinit" reduce using rule 205 (declaration) "constinit" [reduce using rule 272 (export-declaration)] "decltype" reduce using rule 205 (declaration) "decltype" [reduce using rule 272 (export-declaration)] "enum" reduce using rule 205 (declaration) "enum" [reduce using rule 272 (export-declaration)] "explicit" reduce using rule 205 (declaration) "explicit" [reduce using rule 272 (export-declaration)] "*" reduce using rule 205 (declaration) "*" [reduce using rule 272 (export-declaration)] "module" reduce using rule 205 (declaration) "module" [reduce using rule 272 (export-declaration)] "import" reduce using rule 205 (declaration) "import" [reduce using rule 272 (export-declaration)] "namespace" reduce using rule 205 (declaration) "namespace" [reduce using rule 272 (export-declaration)] "~" reduce using rule 205 (declaration) "~" [reduce using rule 272 (export-declaration)] "auto" reduce using rule 205 (declaration) "auto" [reduce using rule 272 (export-declaration)] "char" reduce using rule 205 (declaration) "char" [reduce using rule 272 (export-declaration)] "char8_t" reduce using rule 205 (declaration) "char8_t" [reduce using rule 272 (export-declaration)] "char16_t" reduce using rule 205 (declaration) "char16_t" [reduce using rule 272 (export-declaration)] "char32_t" reduce using rule 205 (declaration) "char32_t" [reduce using rule 272 (export-declaration)] "wchar_t" reduce using rule 205 (declaration) "wchar_t" [reduce using rule 272 (export-declaration)] "bool" reduce using rule 205 (declaration) "bool" [reduce using rule 272 (export-declaration)] "short" reduce using rule 205 (declaration) "short" [reduce using rule 272 (export-declaration)] "int" reduce using rule 205 (declaration) "int" [reduce using rule 272 (export-declaration)] "long" reduce using rule 205 (declaration) "long" [reduce using rule 272 (export-declaration)] "signed" reduce using rule 205 (declaration) "signed" [reduce using rule 272 (export-declaration)] "unsigned" reduce using rule 205 (declaration) "unsigned" [reduce using rule 272 (export-declaration)] "float" reduce using rule 205 (declaration) "float" [reduce using rule 272 (export-declaration)] "double" reduce using rule 205 (declaration) "double" [reduce using rule 272 (export-declaration)] "void" reduce using rule 205 (declaration) "void" [reduce using rule 272 (export-declaration)] "static_assert" reduce using rule 205 (declaration) "static_assert" [reduce using rule 272 (export-declaration)] "static" reduce using rule 205 (declaration) "static" [reduce using rule 272 (export-declaration)] "thread_local" reduce using rule 205 (declaration) "thread_local" [reduce using rule 272 (export-declaration)] "mutable" reduce using rule 205 (declaration) "mutable" [reduce using rule 272 (export-declaration)] $default reduce using rule 205 (declaration)
682 string-literal → STRING_LITERAL • $default reduce using rule 682 (string-literal)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 390 | "extern" string-literal • "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 391 | "extern" string-literal • declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "{" shift, and go to state 213 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 214 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 265 explicit-specialization → "template" "<" • ">" declaration 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 692 | "template" "<" • template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 697 template-parameter → • type-parameter 698 | • parameter-declaration 699 template-parameter-list → • template-parameter 700 | • template-parameter-list "," template-parameter 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 716 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | • type-parameter-key IDENTIFIER-opt "=" type-id 718 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | • type-constraint IDENTIFIER-opt "=" type-id 720 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 215 "typename" shift, and go to state 216 "class" shift, and go to state 217 "decltype" shift, and go to state 21 ">" shift, and go to state 218 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 220 parameter-declaration go to state 221 simple-template-id go to state 96 template-head go to state 222 template-name go to state 102 template-parameter go to state 223 template-parameter-list go to state 224 type-constraint go to state 225 type-name go to state 106 type-parameter go to state 226 type-parameter-key go to state 227 typedef-name go to state 108
455 nested-name-specifier → decltype-specifier • "::" "::" shift, and go to state 188
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 733 typename-specifier → "typename" nested-name-specifier • IDENTIFIER 734 | "typename" nested-name-specifier • TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 228 "template" shift, and go to state 229 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 230
44 alias-declaration → "using" IDENTIFIER • attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 231
26 TYPENAME-opt → "typename" • $default reduce using rule 26 (TYPENAME-opt)
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → "enum" • nested-name-specifier-opt IDENTIFIER 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 133 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 764 using-declarator → TYPENAME-opt • nested-name-specifier unqualified-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 232 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
768 using-enum-declaration → "using" elaborated-enum-specifier • ";" ";" shift, and go to state 233
5 ELLIPSIS-opt → • %empty [",", ";"] 6 | • "..." 765 using-declarator-list → using-declarator • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 234
763 using-declaration → "using" using-declarator-list • ";" 766 using-declarator-list → using-declarator-list • "," using-declarator ELLIPSIS-opt "," shift, and go to state 235 ";" shift, and go to state 236
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 214 | "decltype" "(" • expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 276 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
244 enum-key → "enum" "class" • $default reduce using rule 244 (enum-key)
245 enum-key → "enum" "struct" • $default reduce using rule 245 (enum-key)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] IDENTIFIER shift, and go to state 197 "template" shift, and go to state 229 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 199
228 elaborated-enum-specifier → "enum" nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → "explicit" "(" • constant-expression ")" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 309 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["export", "module"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 332 global-module-fragment → "module" ";" • declaration-seq-opt 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 208 (declaration-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 208 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 311 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
432 module-name-qualifier → IDENTIFIER • "." "." shift, and go to state 312
432 module-name-qualifier → • IDENTIFIER "." 433 | • module-name-qualifier IDENTIFIER "." 434 module-name-qualifier-opt → • %empty [IDENTIFIER] 435 | • module-name-qualifier 436 module-partition → ":" • module-name-qualifier-opt IDENTIFIER IDENTIFIER shift, and go to state 136 IDENTIFIER [reduce using rule 434 (module-name-qualifier-opt)] module-name-qualifier go to state 141 module-name-qualifier-opt go to state 313
339 header-name → HEADER_NAME • $default reduce using rule 339 (header-name)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 430 module-import-declaration → "import" header-name • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 314
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 428 module-import-declaration → "import" module-name • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 315
433 module-name-qualifier → module-name-qualifier • IDENTIFIER "." 435 module-name-qualifier-opt → module-name-qualifier • [IDENTIFIER] IDENTIFIER shift, and go to state 316 IDENTIFIER [reduce using rule 435 (module-name-qualifier-opt)]
431 module-name → module-name-qualifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 317
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 429 module-import-declaration → "import" module-partition • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 318
234 enclosing-namespace-specifier → IDENTIFIER • ["::"] 445 namespace-alias-definition → "namespace" IDENTIFIER • "=" qualified-namespace-specifier ";" "=" shift, and go to state 319 $default reduce using rule 234 (enclosing-namespace-specifier)
235 enclosing-namespace-specifier → enclosing-namespace-specifier • "::" INLINE-opt IDENTIFIER 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier • "::" INLINE-opt IDENTIFIER "{" namespace-body "}" "::" shift, and go to state 320
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → "static_assert" "(" • constant-expression ")" ";" 677 | "static_assert" "(" • constant-expression "," string-literal ")" ";" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 321 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 264 | EXTERN-opt "template" • declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 322 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 443 named-namespace-definition → INLINE-opt "namespace" • attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 754 unnamed-namespace-definition → INLINE-opt "namespace" • attribute-specifier-seq-opt "{" namespace-body "}" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 323
680 storage-class-specifier → "extern" • $default reduce using rule 680 (storage-class-specifier)
188 decl-specifier → "inline" • $default reduce using rule 188 (decl-specifier)
71 attribute-declaration → attribute-specifier-seq ";" • $default reduce using rule 71 (attribute-declaration)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 348 init-declarator → • declarator initializer-opt 349 | • declarator requires-clause 350 init-declarator-list → • init-declarator 351 | • init-declarator-list "," init-declarator 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 641 simple-declaration → attribute-specifier-seq decl-specifier-seq • init-declarator-list ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator go to state 182 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 init-declarator go to state 183 init-declarator-list go to state 324 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 172 ptr-declarator go to state 173 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 239 enum-head → enum-key • attribute-specifier-seq-opt enum-head-name-opt enum-base-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 325
330 function-specifier → explicit-specifier • $default reduce using rule 330 (function-specifier)
6 ELLIPSIS-opt → "..." • $default reduce using rule 6 (ELLIPSIS-opt)
767 using-directive → attribute-specifier-seq-opt "using" • "namespace" nested-name-specifier-opt namespace-name ";" "namespace" shift, and go to state 326
45 alignment-specifier → "alignas" • "(" type-id ELLIPSIS-opt ")" 46 | "alignas" • "(" constant-expression ELLIPSIS-opt ")" "(" shift, and go to state 327
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 493 | "(" • ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 328 ptr-declarator go to state 329 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 594 ptr-operator → "&" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 330
49 asm-declaration → attribute-specifier-seq-opt "asm" • "(" string-literal ")" ";" "(" shift, and go to state 331
80 attribute-specifier → "[" • "[" attribute-using-prefix-opt attribute-list "]" "]" "[" shift, and go to state 332
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 595 ptr-operator → "&&" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 333
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 593 ptr-operator → "*" • attribute-specifier-seq-opt cv-qualifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 334
137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 213 declarator-id → ELLIPSIS-opt • id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 340 id-expression → • unqualified-id 341 | • qualified-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "::" shift, and go to state 6 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "~" shift, and go to state 335 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 120 enum-name go to state 71 id-expression go to state 336 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 337 operator-function-id go to state 289 qualified-id go to state 293 simple-template-id go to state 297 template-id go to state 300 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 305
81 attribute-specifier → alignment-specifier • $default reduce using rule 81 (attribute-specifier)
82 attribute-specifier-seq → attribute-specifier-seq-opt attribute-specifier • $default reduce using rule 82 (attribute-specifier-seq)
192 decl-specifier-seq-opt → decl-specifier-seq • ["...", IDENTIFIER, "::", "(", "&", "&&", "operator", "decltype", "*", "~"] 602 ref-qualifier → • "&" 603 | • "&&" 604 ref-qualifier-opt → • %empty ["["] 605 | • ref-qualifier 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" initializer ";" "&" shift, and go to state 338 "&&" shift, and go to state 339 "&" [reduce using rule 192 (decl-specifier-seq-opt)] "[" reduce using rule 604 (ref-qualifier-opt) "&&" [reduce using rule 192 (decl-specifier-seq-opt)] $default reduce using rule 192 (decl-specifier-seq-opt) ref-qualifier go to state 340 ref-qualifier-opt go to state 341
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt • declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt • declarator requires-clause function-body 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator go to state 342 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 172 ptr-declarator go to state 173 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
476 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator • ";" ";" shift, and go to state 343
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 490 noptr-declarator → declarator-id • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 344
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 596 ptr-operator → nested-name-specifier • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 646 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 197 "template" shift, and go to state 198 "*" shift, and go to state 345 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 199
212 declarator → noptr-declarator • parameters-and-qualifiers trailing-return-type 491 noptr-declarator → noptr-declarator • parameters-and-qualifiers 492 | noptr-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 591 ptr-declarator → noptr-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" shift, and go to state 346 "[" shift, and go to state 347 "(" [reduce using rule 591 (ptr-declarator)] $default reduce using rule 591 (ptr-declarator) parameters-and-qualifiers go to state 348
211 declarator → ptr-declarator • $default reduce using rule 211 (declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 592 | ptr-operator • ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 328 ptr-declarator go to state 349 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 142 class-specifier → class-head "{" • member-specification-opt "}" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 233 empty-declaration → • ";" 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 404 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 405 | • function-definition 406 | • using-declaration 407 | • using-enum-declaration 408 | • static_assert-declaration 409 | • template-declaration 410 | • explicit-specialization 411 | • deduction-guide 412 | • alias-declaration 413 | • opaque-enum-declaration 414 | • empty-declaration 423 member-specification → • member-declaration member-specification-opt 424 | • access-specifier ":" member-specification-opt 425 member-specification-opt → • %empty ["}"] 426 | • member-specification 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 763 using-declaration → • "using" using-declarator-list ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 350 "protected" shift, and go to state 351 "public" shift, and go to state 352 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 353 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 425 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 354 alias-declaration go to state 355 attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 356 deduction-guide go to state 357 empty-declaration go to state 358 enum-key go to state 359 explicit-specialization go to state 360 explicit-specifier go to state 361 explicit-specifier-opt go to state 76 function-definition go to state 362 member-declaration go to state 363 member-specification go to state 364 member-specification-opt go to state 365 opaque-enum-declaration go to state 366 static_assert-declaration go to state 367 template-declaration go to state 368 template-head go to state 101 using-declaration go to state 369 using-enum-declaration go to state 370
84 attribute-specifier-seq-opt → attribute-specifier-seq • $default reduce using rule 84 (attribute-specifier-seq-opt)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 99 base-clause → • ":" base-specifier-list 100 base-clause-opt → • %empty ["{"] 101 | • base-clause 131 class-head → class-key attribute-specifier-seq-opt • class-head-name class-virt-specifier-opt base-clause-opt 132 | class-key attribute-specifier-seq-opt • base-clause-opt 133 class-head-name → • nested-name-specifier-opt class-name 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt • nested-name-specifier-opt IDENTIFIER 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 157 "[" shift, and go to state 161 ":" shift, and go to state 371 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] $default reduce using rule 100 (base-clause-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 base-clause go to state 372 base-clause-opt go to state 373 class-head-name go to state 374 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 375 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 231 elaborated-type-specifier → class-key nested-name-specifier • TEMPLATE-opt simple-template-id 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" IDENTIFIER shift, and go to state 197 "template" shift, and go to state 229 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 376
138 class-name → simple-template-id • ["::"] 230 elaborated-type-specifier → class-key simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 732 typedef-name → simple-template-id • ["::"] "::" reduce using rule 138 (class-name) "::" [reduce using rule 230 (elaborated-type-specifier)] "::" [reduce using rule 732 (typedef-name)] $default reduce using rule 230 (elaborated-type-specifier)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 189 decl-specifier-seq → decl-specifier attribute-specifier-seq-opt • [",", "...", IDENTIFIER, "noexcept", "::", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "&&", "operator", "decltype", "->", ">", "*", "requires", "~"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "alignas" [reduce using rule 189 (decl-specifier-seq)] "[" [reduce using rule 189 (decl-specifier-seq)] $default reduce using rule 189 (decl-specifier-seq) alignment-specifier go to state 165 attribute-specifier go to state 166
190 decl-specifier-seq → decl-specifier decl-specifier-seq • $default reduce using rule 190 (decl-specifier-seq)
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 348 init-declarator → declarator • initializer-opt 349 | declarator • requires-clause 359 initializer → • brace-or-equal-initializer 360 | • "(" expression-list ")" 365 initializer-opt → • %empty [",", ";"] 366 | • initializer 621 requires-clause → • "requires" constraint-logical-or-expression "=" shift, and go to state 377 "(" shift, and go to state 378 "{" shift, and go to state 379 "requires" shift, and go to state 380 $default reduce using rule 365 (initializer-opt) brace-or-equal-initializer go to state 381 braced-init-list go to state 382 initializer go to state 383 initializer-opt go to state 384 requires-clause go to state 385
350 init-declarator-list → init-declarator • $default reduce using rule 350 (init-declarator-list)
351 init-declarator-list → init-declarator-list • "," init-declarator 353 init-declarator-list-opt → init-declarator-list • [";"] "," shift, and go to state 386 $default reduce using rule 353 (init-declarator-list-opt)
640 simple-declaration → decl-specifier-seq init-declarator-list-opt • ";" ";" shift, and go to state 387
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 596 ptr-operator → nested-name-specifier • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt IDENTIFIER shift, and go to state 197 "template" shift, and go to state 229 "*" shift, and go to state 345 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 199
207 declaration-seq → declaration-seq declaration • $default reduce using rule 207 (declaration-seq)
455 nested-name-specifier → decltype-specifier "::" • $default reduce using rule 455 (nested-name-specifier)
247 enum-specifier → enum-head "{" • enumerator-list-opt "}" 248 | enum-head "{" • enumerator-list "," "}" 249 enumerator → • IDENTIFIER attribute-specifier-seq-opt 250 enumerator-definition → • enumerator 251 | • enumerator "=" constant-expression 252 enumerator-list → • enumerator-definition 253 | • enumerator-list "," enumerator-definition 254 enumerator-list-opt → • %empty ["}"] 255 | • enumerator-list IDENTIFIER shift, and go to state 388 $default reduce using rule 254 (enumerator-list-opt) enumerator go to state 389 enumerator-definition go to state 390 enumerator-list go to state 391 enumerator-list-opt go to state 392
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 239 enum-head → enum-key attribute-specifier-seq-opt • enum-head-name-opt enum-base-opt 240 enum-head-name → • nested-name-specifier-opt IDENTIFIER 241 enum-head-name-opt → • %empty [":", "{"] 242 | • enum-head-name 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt • enum-head-name enum-base-opt ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] $default reduce using rule 241 (enum-head-name-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 class-name go to state 55 decltype-specifier go to state 120 enum-head-name go to state 393 enum-head-name-opt go to state 394 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 395 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
696 template-name → IDENTIFIER • $default reduce using rule 696 (template-name)
215 deduction-guide → explicit-specifier-opt template-name • "(" parameter-declaration-clause ")" "->" simple-template-id ";" "(" shift, and go to state 396
8 EXPORT-opt → "export" • $default reduce using rule 8 (EXPORT-opt)
427 module-declaration → EXPORT-opt • "module" module-name module-partition-opt attribute-specifier-seq-opt ";" "module" shift, and go to state 397
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty [$end, "module"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 706 translation-unit → global-module-fragment-opt module-declaration • declaration-seq-opt private-module-fragment-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 208 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 208 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 398 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
454 nested-name-specifier → namespace-name "::" • $default reduce using rule 454 (nested-name-specifier)
456 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" "::" shift, and go to state 399
22 TEMPLATE-opt → "template" • [IDENTIFIER, "operator", "~"] 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 646 simple-type-specifier → nested-name-specifier "template" • simple-template-id 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 191 IDENTIFIER [reduce using rule 22 (TEMPLATE-opt)] $default reduce using rule 22 (TEMPLATE-opt) simple-template-id go to state 400 template-name go to state 102
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 191 simple-template-id go to state 401 template-name go to state 102
137 class-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 151 concept-name → IDENTIFIER • ["decltype", "<", "auto"] 246 enum-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 696 template-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 731 typedef-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 137 (class-name) "," [reduce using rule 246 (enum-name)] "," [reduce using rule 696 (template-name)] "," [reduce using rule 731 (typedef-name)] "constexpr" reduce using rule 137 (class-name) "constexpr" [reduce using rule 246 (enum-name)] "constexpr" [reduce using rule 696 (template-name)] "constexpr" [reduce using rule 731 (typedef-name)] "..." reduce using rule 137 (class-name) "..." [reduce using rule 246 (enum-name)] "..." [reduce using rule 696 (template-name)] "..." [reduce using rule 731 (typedef-name)] "export" reduce using rule 137 (class-name) "export" [reduce using rule 246 (enum-name)] "export" [reduce using rule 696 (template-name)] "export" [reduce using rule 731 (typedef-name)] "extern" reduce using rule 137 (class-name) "extern" [reduce using rule 246 (enum-name)] "extern" [reduce using rule 696 (template-name)] "extern" [reduce using rule 731 (typedef-name)] IDENTIFIER reduce using rule 137 (class-name) IDENTIFIER [reduce using rule 246 (enum-name)] IDENTIFIER [reduce using rule 696 (template-name)] IDENTIFIER [reduce using rule 731 (typedef-name)] "inline" reduce using rule 137 (class-name) "inline" [reduce using rule 246 (enum-name)] "inline" [reduce using rule 696 (template-name)] "inline" [reduce using rule 731 (typedef-name)] "noexcept" reduce using rule 137 (class-name) "noexcept" [reduce using rule 246 (enum-name)] "noexcept" [reduce using rule 696 (template-name)] "noexcept" [reduce using rule 731 (typedef-name)] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 696 (template-name)] "::" [reduce using rule 731 (typedef-name)] "template" reduce using rule 137 (class-name) "template" [reduce using rule 246 (enum-name)] "template" [reduce using rule 696 (template-name)] "template" [reduce using rule 731 (typedef-name)] "typename" reduce using rule 137 (class-name) "typename" [reduce using rule 246 (enum-name)] "typename" [reduce using rule 696 (template-name)] "typename" [reduce using rule 731 (typedef-name)] "virtual" reduce using rule 137 (class-name) "virtual" [reduce using rule 246 (enum-name)] "virtual" [reduce using rule 696 (template-name)] "virtual" [reduce using rule 731 (typedef-name)] "+" reduce using rule 137 (class-name) "+" [reduce using rule 246 (enum-name)] "+" [reduce using rule 696 (template-name)] "+" [reduce using rule 731 (typedef-name)] "-" reduce using rule 137 (class-name) "-" [reduce using rule 246 (enum-name)] "-" [reduce using rule 696 (template-name)] "-" [reduce using rule 731 (typedef-name)] "using" reduce using rule 137 (class-name) "using" [reduce using rule 246 (enum-name)] "using" [reduce using rule 696 (template-name)] "using" [reduce using rule 731 (typedef-name)] "=" reduce using rule 137 (class-name) "=" [reduce using rule 246 (enum-name)] "=" [reduce using rule 696 (template-name)] "=" [reduce using rule 731 (typedef-name)] ";" reduce using rule 137 (class-name) ";" [reduce using rule 246 (enum-name)] ";" [reduce using rule 696 (template-name)] ";" [reduce using rule 731 (typedef-name)] "alignas" reduce using rule 137 (class-name) "alignas" [reduce using rule 246 (enum-name)] "alignas" [reduce using rule 696 (template-name)] "alignas" [reduce using rule 731 (typedef-name)] "(" reduce using rule 137 (class-name) "(" [reduce using rule 246 (enum-name)] "(" [reduce using rule 696 (template-name)] "(" [reduce using rule 731 (typedef-name)] ")" reduce using rule 137 (class-name) ")" [reduce using rule 246 (enum-name)] ")" [reduce using rule 696 (template-name)] ")" [reduce using rule 731 (typedef-name)] "&" reduce using rule 137 (class-name) "&" [reduce using rule 246 (enum-name)] "&" [reduce using rule 696 (template-name)] "&" [reduce using rule 731 (typedef-name)] "asm" reduce using rule 137 (class-name) "asm" [reduce using rule 246 (enum-name)] "asm" [reduce using rule 696 (template-name)] "asm" [reduce using rule 731 (typedef-name)] "*=" reduce using rule 137 (class-name) "*=" [reduce using rule 246 (enum-name)] "*=" [reduce using rule 696 (template-name)] "*=" [reduce using rule 731 (typedef-name)] "/=" reduce using rule 137 (class-name) "/=" [reduce using rule 246 (enum-name)] "/=" [reduce using rule 696 (template-name)] "/=" [reduce using rule 731 (typedef-name)] "%=" reduce using rule 137 (class-name) "%=" [reduce using rule 246 (enum-name)] "%=" [reduce using rule 696 (template-name)] "%=" [reduce using rule 731 (typedef-name)] "+=" reduce using rule 137 (class-name) "+=" [reduce using rule 246 (enum-name)] "+=" [reduce using rule 696 (template-name)] "+=" [reduce using rule 731 (typedef-name)] "-=" reduce using rule 137 (class-name) "-=" [reduce using rule 246 (enum-name)] "-=" [reduce using rule 696 (template-name)] "-=" [reduce using rule 731 (typedef-name)] ">>=" reduce using rule 137 (class-name) ">>=" [reduce using rule 246 (enum-name)] ">>=" [reduce using rule 696 (template-name)] ">>=" [reduce using rule 731 (typedef-name)] "<<=" reduce using rule 137 (class-name) "<<=" [reduce using rule 246 (enum-name)] "<<=" [reduce using rule 696 (template-name)] "<<=" [reduce using rule 731 (typedef-name)] "&=" reduce using rule 137 (class-name) "&=" [reduce using rule 246 (enum-name)] "&=" [reduce using rule 696 (template-name)] "&=" [reduce using rule 731 (typedef-name)] "^=" reduce using rule 137 (class-name) "^=" [reduce using rule 246 (enum-name)] "^=" [reduce using rule 696 (template-name)] "^=" [reduce using rule 731 (typedef-name)] "|=" reduce using rule 137 (class-name) "|=" [reduce using rule 246 (enum-name)] "|=" [reduce using rule 696 (template-name)] "|=" [reduce using rule 731 (typedef-name)] "[" reduce using rule 137 (class-name) "[" [reduce using rule 246 (enum-name)] "[" [reduce using rule 696 (template-name)] "[" [reduce using rule 731 (typedef-name)] "]" reduce using rule 137 (class-name) "]" [reduce using rule 246 (enum-name)] "]" [reduce using rule 696 (template-name)] "]" [reduce using rule 731 (typedef-name)] ":" reduce using rule 137 (class-name) ":" [reduce using rule 246 (enum-name)] ":" [reduce using rule 696 (template-name)] ":" [reduce using rule 731 (typedef-name)] "{" reduce using rule 137 (class-name) "{" [reduce using rule 246 (enum-name)] "{" [reduce using rule 696 (template-name)] "{" [reduce using rule 731 (typedef-name)] "}" reduce using rule 137 (class-name) "}" [reduce using rule 246 (enum-name)] "}" [reduce using rule 696 (template-name)] "}" [reduce using rule 731 (typedef-name)] "class" reduce using rule 137 (class-name) "class" [reduce using rule 246 (enum-name)] "class" [reduce using rule 696 (template-name)] "class" [reduce using rule 731 (typedef-name)] "struct" reduce using rule 137 (class-name) "struct" [reduce using rule 246 (enum-name)] "struct" [reduce using rule 696 (template-name)] "struct" [reduce using rule 731 (typedef-name)] "union" reduce using rule 137 (class-name) "union" [reduce using rule 246 (enum-name)] "union" [reduce using rule 696 (template-name)] "union" [reduce using rule 731 (typedef-name)] "final" reduce using rule 137 (class-name) "final" [reduce using rule 246 (enum-name)] "final" [reduce using rule 696 (template-name)] "final" [reduce using rule 731 (typedef-name)] "<=>" reduce using rule 137 (class-name) "<=>" [reduce using rule 246 (enum-name)] "<=>" [reduce using rule 696 (template-name)] "<=>" [reduce using rule 731 (typedef-name)] "concept" reduce using rule 137 (class-name) "concept" [reduce using rule 246 (enum-name)] "concept" [reduce using rule 696 (template-name)] "concept" [reduce using rule 731 (typedef-name)] "?" reduce using rule 137 (class-name) "?" [reduce using rule 246 (enum-name)] "?" [reduce using rule 696 (template-name)] "?" [reduce using rule 731 (typedef-name)] "&&" reduce using rule 137 (class-name) "&&" [reduce using rule 246 (enum-name)] "&&" [reduce using rule 696 (template-name)] "&&" [reduce using rule 731 (typedef-name)] "||" reduce using rule 137 (class-name) "||" [reduce using rule 246 (enum-name)] "||" [reduce using rule 696 (template-name)] "||" [reduce using rule 731 (typedef-name)] "operator" reduce using rule 137 (class-name) "operator" [reduce using rule 246 (enum-name)] "operator" [reduce using rule 696 (template-name)] "operator" [reduce using rule 731 (typedef-name)] "const" reduce using rule 137 (class-name) "const" [reduce using rule 246 (enum-name)] "const" [reduce using rule 696 (template-name)] "const" [reduce using rule 731 (typedef-name)] "volatile" reduce using rule 137 (class-name) "volatile" [reduce using rule 246 (enum-name)] "volatile" [reduce using rule 696 (template-name)] "volatile" [reduce using rule 731 (typedef-name)] "friend" reduce using rule 137 (class-name) "friend" [reduce using rule 246 (enum-name)] "friend" [reduce using rule 696 (template-name)] "friend" [reduce using rule 731 (typedef-name)] "typedef" reduce using rule 137 (class-name) "typedef" [reduce using rule 246 (enum-name)] "typedef" [reduce using rule 696 (template-name)] "typedef" [reduce using rule 731 (typedef-name)] "consteval" reduce using rule 137 (class-name) "consteval" [reduce using rule 246 (enum-name)] "consteval" [reduce using rule 696 (template-name)] "consteval" [reduce using rule 731 (typedef-name)] "constinit" reduce using rule 137 (class-name) "constinit" [reduce using rule 246 (enum-name)] "constinit" [reduce using rule 696 (template-name)] "constinit" [reduce using rule 731 (typedef-name)] "decltype" reduce using rule 137 (class-name) "decltype" [reduce using rule 151 (concept-name)] "decltype" [reduce using rule 246 (enum-name)] "decltype" [reduce using rule 696 (template-name)] "decltype" [reduce using rule 731 (typedef-name)] "->" reduce using rule 137 (class-name) "->" [reduce using rule 246 (enum-name)] "->" [reduce using rule 696 (template-name)] "->" [reduce using rule 731 (typedef-name)] "." reduce using rule 137 (class-name) "." [reduce using rule 246 (enum-name)] "." [reduce using rule 696 (template-name)] "." [reduce using rule 731 (typedef-name)] "enum" reduce using rule 137 (class-name) "enum" [reduce using rule 246 (enum-name)] "enum" [reduce using rule 696 (template-name)] "enum" [reduce using rule 731 (typedef-name)] "==" reduce using rule 137 (class-name) "==" [reduce using rule 246 (enum-name)] "==" [reduce using rule 696 (template-name)] "==" [reduce using rule 731 (typedef-name)] "!=" reduce using rule 137 (class-name) "!=" [reduce using rule 246 (enum-name)] "!=" [reduce using rule 696 (template-name)] "!=" [reduce using rule 731 (typedef-name)] "^" reduce using rule 137 (class-name) "^" [reduce using rule 246 (enum-name)] "^" [reduce using rule 696 (template-name)] "^" [reduce using rule 731 (typedef-name)] "<" reduce using rule 137 (class-name) "<" [reduce using rule 151 (concept-name)] "<" [reduce using rule 246 (enum-name)] "<" [reduce using rule 696 (template-name)] "<" [reduce using rule 731 (typedef-name)] ">" reduce using rule 137 (class-name) ">" [reduce using rule 246 (enum-name)] ">" [reduce using rule 696 (template-name)] ">" [reduce using rule 731 (typedef-name)] "explicit" reduce using rule 137 (class-name) "explicit" [reduce using rule 246 (enum-name)] "explicit" [reduce using rule 696 (template-name)] "explicit" [reduce using rule 731 (typedef-name)] "*" reduce using rule 137 (class-name) "*" [reduce using rule 246 (enum-name)] "*" [reduce using rule 696 (template-name)] "*" [reduce using rule 731 (typedef-name)] "/" reduce using rule 137 (class-name) "/" [reduce using rule 246 (enum-name)] "/" [reduce using rule 696 (template-name)] "/" [reduce using rule 731 (typedef-name)] "%" reduce using rule 137 (class-name) "%" [reduce using rule 246 (enum-name)] "%" [reduce using rule 696 (template-name)] "%" [reduce using rule 731 (typedef-name)] "|" reduce using rule 137 (class-name) "|" [reduce using rule 246 (enum-name)] "|" [reduce using rule 696 (template-name)] "|" [reduce using rule 731 (typedef-name)] "<<" reduce using rule 137 (class-name) "<<" [reduce using rule 246 (enum-name)] "<<" [reduce using rule 696 (template-name)] "<<" [reduce using rule 731 (typedef-name)] ">>" reduce using rule 137 (class-name) ">>" [reduce using rule 246 (enum-name)] ">>" [reduce using rule 696 (template-name)] ">>" [reduce using rule 731 (typedef-name)] "<=" reduce using rule 137 (class-name) "<=" [reduce using rule 246 (enum-name)] "<=" [reduce using rule 696 (template-name)] "<=" [reduce using rule 731 (typedef-name)] ">=" reduce using rule 137 (class-name) ">=" [reduce using rule 246 (enum-name)] ">=" [reduce using rule 696 (template-name)] ">=" [reduce using rule 731 (typedef-name)] ".*" reduce using rule 137 (class-name) ".*" [reduce using rule 246 (enum-name)] ".*" [reduce using rule 696 (template-name)] ".*" [reduce using rule 731 (typedef-name)] "->*" reduce using rule 137 (class-name) "->*" [reduce using rule 246 (enum-name)] "->*" [reduce using rule 696 (template-name)] "->*" [reduce using rule 731 (typedef-name)] "try" reduce using rule 137 (class-name) "try" [reduce using rule 246 (enum-name)] "try" [reduce using rule 696 (template-name)] "try" [reduce using rule 731 (typedef-name)] "import" reduce using rule 137 (class-name) "import" [reduce using rule 246 (enum-name)] "import" [reduce using rule 696 (template-name)] "import" [reduce using rule 731 (typedef-name)] "namespace" reduce using rule 137 (class-name) "namespace" [reduce using rule 246 (enum-name)] "namespace" [reduce using rule 696 (template-name)] "namespace" [reduce using rule 731 (typedef-name)] "requires" reduce using rule 137 (class-name) "requires" [reduce using rule 246 (enum-name)] "requires" [reduce using rule 696 (template-name)] "requires" [reduce using rule 731 (typedef-name)] "~" reduce using rule 137 (class-name) "~" [reduce using rule 246 (enum-name)] "~" [reduce using rule 696 (template-name)] "~" [reduce using rule 731 (typedef-name)] "++" reduce using rule 137 (class-name) "++" [reduce using rule 246 (enum-name)] "++" [reduce using rule 696 (template-name)] "++" [reduce using rule 731 (typedef-name)] "--" reduce using rule 137 (class-name) "--" [reduce using rule 246 (enum-name)] "--" [reduce using rule 696 (template-name)] "--" [reduce using rule 731 (typedef-name)] "auto" reduce using rule 137 (class-name) "auto" [reduce using rule 151 (concept-name)] "auto" [reduce using rule 246 (enum-name)] "auto" [reduce using rule 696 (template-name)] "auto" [reduce using rule 731 (typedef-name)] "char" reduce using rule 137 (class-name) "char" [reduce using rule 246 (enum-name)] "char" [reduce using rule 696 (template-name)] "char" [reduce using rule 731 (typedef-name)] "char8_t" reduce using rule 137 (class-name) "char8_t" [reduce using rule 246 (enum-name)] "char8_t" [reduce using rule 696 (template-name)] "char8_t" [reduce using rule 731 (typedef-name)] "char16_t" reduce using rule 137 (class-name) "char16_t" [reduce using rule 246 (enum-name)] "char16_t" [reduce using rule 696 (template-name)] "char16_t" [reduce using rule 731 (typedef-name)] "char32_t" reduce using rule 137 (class-name) "char32_t" [reduce using rule 246 (enum-name)] "char32_t" [reduce using rule 696 (template-name)] "char32_t" [reduce using rule 731 (typedef-name)] "wchar_t" reduce using rule 137 (class-name) "wchar_t" [reduce using rule 246 (enum-name)] "wchar_t" [reduce using rule 696 (template-name)] "wchar_t" [reduce using rule 731 (typedef-name)] "bool" reduce using rule 137 (class-name) "bool" [reduce using rule 246 (enum-name)] "bool" [reduce using rule 696 (template-name)] "bool" [reduce using rule 731 (typedef-name)] "short" reduce using rule 137 (class-name) "short" [reduce using rule 246 (enum-name)] "short" [reduce using rule 696 (template-name)] "short" [reduce using rule 731 (typedef-name)] "int" reduce using rule 137 (class-name) "int" [reduce using rule 246 (enum-name)] "int" [reduce using rule 696 (template-name)] "int" [reduce using rule 731 (typedef-name)] "long" reduce using rule 137 (class-name) "long" [reduce using rule 246 (enum-name)] "long" [reduce using rule 696 (template-name)] "long" [reduce using rule 731 (typedef-name)] "signed" reduce using rule 137 (class-name) "signed" [reduce using rule 246 (enum-name)] "signed" [reduce using rule 696 (template-name)] "signed" [reduce using rule 731 (typedef-name)] "unsigned" reduce using rule 137 (class-name) "unsigned" [reduce using rule 246 (enum-name)] "unsigned" [reduce using rule 696 (template-name)] "unsigned" [reduce using rule 731 (typedef-name)] "float" reduce using rule 137 (class-name) "float" [reduce using rule 246 (enum-name)] "float" [reduce using rule 696 (template-name)] "float" [reduce using rule 731 (typedef-name)] "double" reduce using rule 137 (class-name) "double" [reduce using rule 246 (enum-name)] "double" [reduce using rule 696 (template-name)] "double" [reduce using rule 731 (typedef-name)] "void" reduce using rule 137 (class-name) "void" [reduce using rule 246 (enum-name)] "void" [reduce using rule 696 (template-name)] "void" [reduce using rule 731 (typedef-name)] "static_assert" reduce using rule 137 (class-name) "static_assert" [reduce using rule 246 (enum-name)] "static_assert" [reduce using rule 696 (template-name)] "static_assert" [reduce using rule 731 (typedef-name)] "static" reduce using rule 137 (class-name) "static" [reduce using rule 246 (enum-name)] "static" [reduce using rule 696 (template-name)] "static" [reduce using rule 731 (typedef-name)] "thread_local" reduce using rule 137 (class-name) "thread_local" [reduce using rule 246 (enum-name)] "thread_local" [reduce using rule 696 (template-name)] "thread_local" [reduce using rule 731 (typedef-name)] "mutable" reduce using rule 137 (class-name) "mutable" [reduce using rule 246 (enum-name)] "mutable" [reduce using rule 696 (template-name)] "mutable" [reduce using rule 731 (typedef-name)] "override" reduce using rule 137 (class-name) "override" [reduce using rule 246 (enum-name)] "override" [reduce using rule 696 (template-name)] "override" [reduce using rule 731 (typedef-name)] $default reduce using rule 137 (class-name)
708 type-constraint → nested-name-specifier-opt concept-name • [",", "...", IDENTIFIER, "=", ";", "decltype", ">", "auto"] 709 | nested-name-specifier-opt concept-name • "<" template-argument-list-opt ">" "<" shift, and go to state 402 $default reduce using rule 708 (type-constraint)
644 simple-template-id → template-name • "<" template-argument-list-opt ">" 649 simple-type-specifier → nested-name-specifier-opt template-name • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 207 "<" [reduce using rule 649 (simple-type-specifier)] $default reduce using rule 649 (simple-type-specifier)
645 simple-type-specifier → nested-name-specifier-opt type-name • $default reduce using rule 645 (simple-type-specifier)
150 concept-definition → "concept" • concept-name "=" constraint-expression ";" 151 concept-name → • IDENTIFIER IDENTIFIER shift, and go to state 403 concept-name go to state 404
691 template-declaration → template-head concept-definition • $default reduce using rule 691 (template-declaration)
690 template-declaration → template-head declaration • $default reduce using rule 690 (template-declaration)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 644 | template-name "<" • template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 406 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 407 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-argument go to state 409 template-argument-list go to state 410 template-argument-list-opt go to state 411 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 412 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
0 $accept → translation-unit $end • $default accept
555 placeholder-type-specifier → type-constraint-opt "decltype" • "(" "auto" ")" "(" shift, and go to state 416
554 placeholder-type-specifier → type-constraint-opt "auto" • $default reduce using rule 554 (placeholder-type-specifier)
453 nested-name-specifier → type-name "::" • $default reduce using rule 453 (nested-name-specifier)
271 export-declaration → "export" "{" declaration-seq-opt • "}" "}" shift, and go to state 417
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 390 | "extern" string-literal "{" • declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 418 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
391 linkage-specification → "extern" string-literal declaration • $default reduce using rule 391 (linkage-specification)
692 template-head → "template" • "<" template-parameter-list ">" requires-clause-opt "<" shift, and go to state 419
723 type-parameter-key → "typename" • $default reduce using rule 723 (type-parameter-key)
722 type-parameter-key → "class" • $default reduce using rule 722 (type-parameter-key)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 265 | "template" "<" ">" • declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 420 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
23 THIS-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 24 | • "this" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 543 parameter-declaration → attribute-specifier-seq-opt • THIS-opt decl-specifier-seq declarator 544 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq abstract-declarator-opt 546 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause "this" shift, and go to state 421 "alignas" shift, and go to state 157 "[" shift, and go to state 161 $default reduce using rule 23 (THIS-opt) THIS-opt go to state 422 alignment-specifier go to state 165 attribute-specifier go to state 166
151 concept-name → • IDENTIFIER 708 type-constraint → nested-name-specifier-opt • concept-name 709 | nested-name-specifier-opt • concept-name "<" template-argument-list-opt ">" IDENTIFIER shift, and go to state 403 concept-name go to state 201
698 template-parameter → parameter-declaration • $default reduce using rule 698 (template-parameter)
720 type-parameter → template-head • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | template-head • type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" "typename" shift, and go to state 216 "class" shift, and go to state 217 type-parameter-key go to state 423
699 template-parameter-list → template-parameter • $default reduce using rule 699 (template-parameter-list)
692 template-head → "template" "<" template-parameter-list • ">" requires-clause-opt 700 template-parameter-list → template-parameter-list • "," template-parameter "," shift, and go to state 424 ">" shift, and go to state 425
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 718 type-parameter → type-constraint • ELLIPSIS-opt IDENTIFIER-opt 719 | type-constraint • IDENTIFIER-opt "=" type-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 426 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 427 IDENTIFIER-opt go to state 428
697 template-parameter → type-parameter • $default reduce using rule 697 (template-parameter)
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 716 type-parameter → type-parameter-key • ELLIPSIS-opt IDENTIFIER-opt 717 | type-parameter-key • IDENTIFIER-opt "=" type-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 426 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 429 IDENTIFIER-opt go to state 430
456 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" 733 typename-specifier → "typename" nested-name-specifier IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 399 "::" [reduce using rule 733 (typename-specifier)] $default reduce using rule 733 (typename-specifier)
22 TEMPLATE-opt → "template" • $default reduce using rule 22 (TEMPLATE-opt)
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 734 typename-specifier → "typename" nested-name-specifier TEMPLATE-opt • simple-template-id IDENTIFIER shift, and go to state 191 simple-template-id go to state 431 template-name go to state 102
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt • "=" defining-type-id ";" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier "=" shift, and go to state 432 "alignas" shift, and go to state 157 "[" shift, and go to state 161 alignment-specifier go to state 165 attribute-specifier go to state 166
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 169 conversion-function-id → • "operator" conversion-type-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 764 using-declarator → TYPENAME-opt nested-name-specifier • unqualified-id IDENTIFIER shift, and go to state 433 "template" shift, and go to state 229 "operator" shift, and go to state 248 "~" shift, and go to state 335 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 199 conversion-function-id go to state 272 literal-operator-id go to state 282 operator-function-id go to state 289 simple-template-id go to state 434 template-id go to state 300 template-name go to state 102 unqualified-id go to state 435
768 using-enum-declaration → "using" elaborated-enum-specifier ";" • $default reduce using rule 768 (using-enum-declaration)
765 using-declarator-list → using-declarator ELLIPSIS-opt • $default reduce using rule 765 (using-declarator-list)
25 TYPENAME-opt → • %empty [IDENTIFIER, "::", "decltype"] 26 | • "typename" 764 using-declarator → • TYPENAME-opt nested-name-specifier unqualified-id 766 using-declarator-list → using-declarator-list "," • using-declarator ELLIPSIS-opt "typename" shift, and go to state 123 $default reduce using rule 25 (TYPENAME-opt) TYPENAME-opt go to state 125 using-declarator go to state 436
763 using-declaration → "using" using-declarator-list ";" • $default reduce using rule 763 (using-declaration)
137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] 755 unqualified-id → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "::" [reduce using rule 755 (unqualified-id)] "<" reduce using rule 696 (template-name) "<" [reduce using rule 755 (unqualified-id)] $default reduce using rule 755 (unqualified-id)
477 noexcept-expression → "noexcept" • "(" expression ")" "(" shift, and go to state 437
752 unary-operator → "!" • $default reduce using rule 752 (unary-operator)
20 SCOPE-opt → "::" • ["delete", "new"] 452 nested-name-specifier → "::" • [IDENTIFIER, "template", "operator", "~"] "delete" reduce using rule 20 (SCOPE-opt) "new" reduce using rule 20 (SCOPE-opt) $default reduce using rule 452 (nested-name-specifier)
578 primary-expression → "this" • $default reduce using rule 578 (primary-expression)
750 unary-operator → "+" • $default reduce using rule 750 (unary-operator)
751 unary-operator → "-" • $default reduce using rule 751 (unary-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 130 | "(" • type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 285 | "(" • cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" • "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 579 | "(" • expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "..." shift, and go to state 438 IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 439 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 440 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 441 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
749 unary-operator → "&" • $default reduce using rule 749 (unary-operator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 123 capture → • simple-capture 124 | • init-capture 125 capture-default → • "&" 126 | • "=" 127 capture-list → • capture 128 | • capture-list "," capture 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 379 lambda-capture → • capture-default 380 | • capture-list 381 | • capture-default "," capture-list 382 lambda-capture-opt → • %empty ["]"] 383 | • lambda-capture 388 lambda-introducer → "[" • lambda-capture-opt "]" 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 155 IDENTIFIER shift, and go to state 442 "this" shift, and go to state 443 "=" shift, and go to state 444 "&" shift, and go to state 445 "*" shift, and go to state 446 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 382 (lambda-capture-opt) ELLIPSIS-opt go to state 447 capture go to state 448 capture-default go to state 449 capture-list go to state 450 init-capture go to state 451 lambda-capture go to state 452 lambda-capture-opt go to state 453 simple-capture go to state 454
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 90 | "co_await" • cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 455 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → "operator" • conversion-type-id 170 conversion-type-id → • type-specifier-seq conversion-declarator-opt 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 392 literal-operator-id → "operator" • string-literal IDENTIFIER 393 | "operator" • user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 497 operator-function-id → "operator" • overloadable-operator 498 | "operator" • overloadable-operator "<" template-argument-list-opt ">" 499 overloadable-operator → • "new" 500 | • "delete" 501 | • "new" "[" "]" 502 | • "delete" "[" "]" 503 | • "co_await" 504 | • "(" ")" 505 | • "[" "]" 506 | • "->" 507 | • "->*" 508 | • "~" 509 | • "!" 510 | • "+" 511 | • "-" 512 | • "*" 513 | • "/" 514 | • "%" 515 | • "^" 516 | • "&" 517 | • "|" 518 | • "=" 519 | • "+=" 520 | • "-=" 521 | • "*=" 522 | • "/=" 523 | • "%=" 524 | • "^=" 525 | • "&=" 526 | • "|=" 527 | • "==" 528 | • "!=" 529 | • "<" 530 | • ">" 531 | • "<=" 532 | • ">=" 533 | • "<=>" 534 | • "&&" 535 | • "||" 536 | • "<<" 537 | • ">>" 538 | • "<<=" 539 | • ">>=" 540 | • "++" 541 | • "--" 542 | • "," 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 762 user-defined-string-literal → • string-literal ud-suffix "," shift, and go to state 456 IDENTIFIER shift, and go to state 4 "!" shift, and go to state 457 "::" shift, and go to state 6 "typename" shift, and go to state 8 "+" shift, and go to state 458 "-" shift, and go to state 459 "=" shift, and go to state 460 "(" shift, and go to state 461 "&" shift, and go to state 462 "*=" shift, and go to state 463 "/=" shift, and go to state 464 "%=" shift, and go to state 465 "+=" shift, and go to state 466 "-=" shift, and go to state 467 ">>=" shift, and go to state 468 "<<=" shift, and go to state 469 "&=" shift, and go to state 470 "^=" shift, and go to state 471 "|=" shift, and go to state 472 "[" shift, and go to state 473 "co_await" shift, and go to state 474 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "<=>" shift, and go to state 475 "&&" shift, and go to state 476 "||" shift, and go to state 477 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "->" shift, and go to state 478 "delete" shift, and go to state 479 "enum" shift, and go to state 124 "==" shift, and go to state 480 "!=" shift, and go to state 481 "^" shift, and go to state 482 "<" shift, and go to state 483 ">" shift, and go to state 484 "*" shift, and go to state 485 "/" shift, and go to state 486 "%" shift, and go to state 487 "|" shift, and go to state 488 "<<" shift, and go to state 489 ">>" shift, and go to state 490 "<=" shift, and go to state 491 ">=" shift, and go to state 492 "->*" shift, and go to state 493 "new" shift, and go to state 494 "~" shift, and go to state 495 "++" shift, and go to state 496 "--" shift, and go to state 497 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 conversion-type-id go to state 498 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 overloadable-operator go to state 499 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 string-literal go to state 500 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 501 typedef-name go to state 108 typename-specifier go to state 109 user-defined-string-literal go to state 502
748 unary-operator → "*" • $default reduce using rule 748 (unary-operator)
616 requirement-parameter-list → • "(" parameter-declaration-clause ")" 617 requirement-parameter-list-opt → • %empty ["{"] 618 | • requirement-parameter-list 624 requires-expression → "requires" • requirement-parameter-list-opt requirement-body "(" shift, and go to state 503 $default reduce using rule 617 (requirement-parameter-list-opt) requirement-parameter-list go to state 504 requirement-parameter-list-opt go to state 505
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 753 unary-operator → "~" • [IDENTIFIER, "noexcept", "!", "::", "this", "typename", "+", "-", "(", "&", "[", "co_await", "operator", "decltype", "delete", "*", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", STRING_LITERAL, "sizeof", "alignof"] 759 unqualified-id → "~" • type-name 760 | "~" • decltype-specifier IDENTIFIER shift, and go to state 506 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 753 (unary-operator)] "decltype" [reduce using rule 753 (unary-operator)] $default reduce using rule 753 (unary-operator) class-name go to state 55 decltype-specifier go to state 507 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 508 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 738 | "++" • cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 509 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 739 | "--" • cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 510 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
570 postfix-expression → "dynamic_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 511
571 postfix-expression → "static_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 512
572 postfix-expression → "reinterpret_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 513
573 postfix-expression → "const_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 514
574 postfix-expression → "typeid" • "(" expression ")" 575 | "typeid" • "(" type-id ")" "(" shift, and go to state 515
576 primary-expression → "literal" • $default reduce using rule 576 (primary-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 54 assignment-expression-opt → • %empty [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 55 | • assignment-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 701 | "throw" • assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 54 (assignment-expression-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 516 assignment-expression-opt go to state 517 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 741 | "sizeof" • unary-expression 742 | • "sizeof" "(" type-id ")" 742 | "sizeof" • "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 743 | "sizeof" • "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id "..." shift, and go to state 518 IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 519 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 520 unary-operator go to state 304 unqualified-id go to state 305
744 unary-expression → "alignof" • "(" type-id ")" "(" shift, and go to state 521
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 775 | "co_yield" • assignment-expression 776 | • "co_yield" braced-init-list 776 | "co_yield" • braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 522 await-expression go to state 268 braced-init-list go to state 523 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
222 delete-expression → SCOPE-opt • "delete" cast-expression 223 | SCOPE-opt • "delete" "[" "]" cast-expression 466 new-expression → SCOPE-opt • "new" new-placement-opt new-type-id new-initializer-opt 467 | SCOPE-opt • "new" new-placement-opt "(" type-id ")" new-initializer-opt "delete" shift, and go to state 524 "new" shift, and go to state 525
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 633 shift-expression → additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 526 "-" shift, and go to state 527 $default reduce using rule 633 (shift-expression)
48 and-expression → and-expression • "&" equality-expression 262 exclusive-or-expression → and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] "&" shift, and go to state 528 $default reduce using rule 262 (exclusive-or-expression)
277 expression → assignment-expression • $default reduce using rule 277 (expression)
740 unary-expression → await-expression • $default reduce using rule 740 (unary-expression)
556 pm-expression → cast-expression • $default reduce using rule 556 (pm-expression)
147 compare-expression → compare-expression • "<=>" shift-expression 606 relational-expression → compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 529 $default reduce using rule 606 (relational-expression)
50 assignment-expression → conditional-expression • $default reduce using rule 50 (assignment-expression)
757 unqualified-id → conversion-function-id • $default reduce using rule 757 (unqualified-id)
747 unary-expression → delete-expression • $default reduce using rule 747 (unary-expression)
47 and-expression → equality-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] 257 equality-expression → equality-expression • "==" relational-expression 258 | equality-expression • "!=" relational-expression "==" shift, and go to state 530 "!=" shift, and go to state 531 $default reduce using rule 47 (and-expression)
263 exclusive-or-expression → exclusive-or-expression • "^" and-expression 344 inclusive-or-expression → exclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">", "|"] "^" shift, and go to state 532 $default reduce using rule 344 (inclusive-or-expression)
214 decltype-specifier → "decltype" "(" expression • ")" 278 expression → expression • "," assignment-expression "," shift, and go to state 533 ")" shift, and go to state 534
582 primary-expression → fold-expression • $default reduce using rule 582 (primary-expression)
580 primary-expression → id-expression • $default reduce using rule 580 (primary-expression)
345 inclusive-or-expression → inclusive-or-expression • "|" exclusive-or-expression 394 logical-and-expression → inclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">"] "|" shift, and go to state 535 $default reduce using rule 394 (logical-and-expression)
581 primary-expression → lambda-expression • $default reduce using rule 581 (primary-expression)
131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->"] 192 | • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 384 lambda-declarator → • lambda-specifiers 385 | • "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 386 lambda-expression → lambda-introducer • lambda-declarator compound-statement 387 | lambda-introducer • "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 389 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "(" shift, and go to state 536 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "<" shift, and go to state 537 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 191 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 538 decl-specifier-seq-opt go to state 539 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 lambda-declarator go to state 540 lambda-specifiers go to state 541 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
695 template-id → literal-operator-id • "<" template-argument-list-opt ">" 758 unqualified-id → literal-operator-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 542 "<" [reduce using rule 758 (unqualified-id)] $default reduce using rule 758 (unqualified-id)
395 logical-and-expression → logical-and-expression • "&&" inclusive-or-expression 396 logical-or-expression → logical-and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "||", ">"] "&&" shift, and go to state 543 $default reduce using rule 396 (logical-or-expression)
53 assignment-expression → logical-or-expression • assignment-operator initializer-clause 56 assignment-operator → • "=" 57 | • "*=" 58 | • "/=" 59 | • "%=" 60 | • "+=" 61 | • "-=" 62 | • ">>=" 63 | • "<<=" 64 | • "&=" 65 | • "^=" 66 | • "|=" 156 conditional-expression → logical-or-expression • [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 157 | logical-or-expression • "?" expression ":" assignment-expression 397 logical-or-expression → logical-or-expression • "||" logical-and-expression "=" shift, and go to state 544 "*=" shift, and go to state 545 "/=" shift, and go to state 546 "%=" shift, and go to state 547 "+=" shift, and go to state 548 "-=" shift, and go to state 549 ">>=" shift, and go to state 550 "<<=" shift, and go to state 551 "&=" shift, and go to state 552 "^=" shift, and go to state 553 "|=" shift, and go to state 554 "?" shift, and go to state 555 "||" shift, and go to state 556 "=" [reduce using rule 156 (conditional-expression)] $default reduce using rule 156 (conditional-expression) assignment-operator go to state 557
41 additive-expression → multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 440 multiplicative-expression → multiplicative-expression • "*" pm-expression 441 | multiplicative-expression • "/" pm-expression 442 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 558 "/" shift, and go to state 559 "%" shift, and go to state 560 $default reduce using rule 41 (additive-expression)
21 TEMPLATE-opt → • %empty [IDENTIFIER, "operator", "~"] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 600 qualified-id → nested-name-specifier • TEMPLATE-opt unqualified-id 646 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 197 "template" shift, and go to state 198 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 561
746 unary-expression → new-expression • $default reduce using rule 746 (unary-expression)
745 unary-expression → noexcept-expression • $default reduce using rule 745 (unary-expression)
694 template-id → operator-function-id • "<" template-argument-list-opt ">" 756 unqualified-id → operator-function-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 562 "<" [reduce using rule 756 (unqualified-id)] $default reduce using rule 756 (unqualified-id)
439 multiplicative-expression → pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 557 pm-expression → pm-expression • ".*" cast-expression 558 | pm-expression • "->*" cast-expression ".*" shift, and go to state 563 "->*" shift, and go to state 564 $default reduce using rule 439 (multiplicative-expression)
560 postfix-expression → postfix-expression • "[" expression-list-opt "]" 561 | postfix-expression • "(" expression-list-opt ")" 566 | postfix-expression • "." TEMPLATE-opt id-expression 567 | postfix-expression • "->" TEMPLATE-opt id-expression 568 | postfix-expression • "++" 569 | postfix-expression • "--" 736 unary-expression → postfix-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "(" shift, and go to state 565 "[" shift, and go to state 566 "->" shift, and go to state 567 "." shift, and go to state 568 "++" shift, and go to state 569 "--" shift, and go to state 570 $default reduce using rule 736 (unary-expression)
559 postfix-expression → primary-expression • $default reduce using rule 559 (postfix-expression)
341 id-expression → qualified-id • $default reduce using rule 341 (id-expression)
256 equality-expression → relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", ">", "|"] 607 relational-expression → relational-expression • "<" compare-expression 608 | relational-expression • ">" compare-expression 609 | relational-expression • "<=" compare-expression 610 | relational-expression • ">=" compare-expression "<" shift, and go to state 571 ">" shift, and go to state 572 "<=" shift, and go to state 573 ">=" shift, and go to state 574 ">" [reduce using rule 256 (equality-expression)] $default reduce using rule 256 (equality-expression)
583 primary-expression → requires-expression • $default reduce using rule 583 (primary-expression)
146 compare-expression → shift-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] 634 shift-expression → shift-expression • "<<" additive-expression 635 | shift-expression • ">>" additive-expression "<<" shift, and go to state 575 ">>" shift, and go to state 576 $default reduce using rule 146 (compare-expression)
138 class-name → simple-template-id • ["::"] 693 template-id → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 732 typedef-name → simple-template-id • ["::"] "::" reduce using rule 138 (class-name) "::" [reduce using rule 693 (template-id)] "::" [reduce using rule 732 (typedef-name)] $default reduce using rule 693 (template-id)
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 562 postfix-expression → simple-type-specifier • "(" expression-list-opt ")" 564 | simple-type-specifier • braced-init-list "(" shift, and go to state 577 "{" shift, and go to state 379 braced-init-list go to state 578
577 primary-expression → string-literal • $default reduce using rule 577 (primary-expression)
761 unqualified-id → template-id • $default reduce using rule 761 (unqualified-id)
52 assignment-expression → throw-expression • $default reduce using rule 52 (assignment-expression)
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 563 postfix-expression → typename-specifier • "(" expression-list-opt ")" 565 | typename-specifier • braced-init-list "(" shift, and go to state 579 "{" shift, and go to state 379 braced-init-list go to state 580
129 cast-expression → unary-expression • $default reduce using rule 129 (cast-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 737 | unary-operator • cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 581 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
340 id-expression → unqualified-id • $default reduce using rule 340 (id-expression)
51 assignment-expression → yield-expression • $default reduce using rule 51 (assignment-expression)
228 elaborated-enum-specifier → "enum" nested-name-specifier-opt IDENTIFIER • $default reduce using rule 228 (elaborated-enum-specifier)
158 constant-expression → conditional-expression • $default reduce using rule 158 (constant-expression)
266 explicit-specifier → "explicit" "(" constant-expression • ")" ")" shift, and go to state 582
156 conditional-expression → logical-or-expression • [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 157 | logical-or-expression • "?" expression ":" assignment-expression 397 logical-or-expression → logical-or-expression • "||" logical-and-expression "?" shift, and go to state 555 "||" shift, and go to state 556 $default reduce using rule 156 (conditional-expression)
332 global-module-fragment → "module" ";" declaration-seq-opt • $default reduce using rule 332 (global-module-fragment)
432 module-name-qualifier → IDENTIFIER "." • $default reduce using rule 432 (module-name-qualifier)
436 module-partition → ":" module-name-qualifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 583
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 430 module-import-declaration → "import" header-name attribute-specifier-seq-opt • ";" ";" shift, and go to state 584 "alignas" shift, and go to state 157 "[" shift, and go to state 161 alignment-specifier go to state 165 attribute-specifier go to state 166
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 428 module-import-declaration → "import" module-name attribute-specifier-seq-opt • ";" ";" shift, and go to state 585 "alignas" shift, and go to state 157 "[" shift, and go to state 161 alignment-specifier go to state 165 attribute-specifier go to state 166
433 module-name-qualifier → module-name-qualifier IDENTIFIER • "." "." shift, and go to state 586
431 module-name → module-name-qualifier-opt IDENTIFIER • $default reduce using rule 431 (module-name)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 429 module-import-declaration → "import" module-partition attribute-specifier-seq-opt • ";" ";" shift, and go to state 587 "alignas" shift, and go to state 157 "[" shift, and go to state 161 alignment-specifier go to state 165 attribute-specifier go to state 166
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → "namespace" IDENTIFIER "=" • qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 601 qualified-namespace-specifier → • nested-name-specifier-opt namespace-name 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 588 qualified-namespace-specifier go to state 589 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
13 INLINE-opt → • %empty [IDENTIFIER] 14 | • "inline" 235 enclosing-namespace-specifier → enclosing-namespace-specifier "::" • INLINE-opt IDENTIFIER 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" • INLINE-opt IDENTIFIER "{" namespace-body "}" "inline" shift, and go to state 590 $default reduce using rule 13 (INLINE-opt) INLINE-opt go to state 591
676 static_assert-declaration → "static_assert" "(" constant-expression • ")" ";" 677 | "static_assert" "(" constant-expression • "," string-literal ")" ";" "," shift, and go to state 592 ")" shift, and go to state 593
264 explicit-instantiation → EXTERN-opt "template" declaration • $default reduce using rule 264 (explicit-instantiation)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt • IDENTIFIER "{" namespace-body "}" 754 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt • "{" namespace-body "}" IDENTIFIER shift, and go to state 594 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "{" shift, and go to state 595 alignment-specifier go to state 165 attribute-specifier go to state 166
351 init-declarator-list → init-declarator-list • "," init-declarator 641 simple-declaration → attribute-specifier-seq decl-specifier-seq init-declarator-list • ";" "," shift, and go to state 386 ";" shift, and go to state 596
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 239 enum-head → enum-key attribute-specifier-seq-opt • enum-head-name-opt enum-base-opt 240 enum-head-name → • nested-name-specifier-opt IDENTIFIER 241 enum-head-name-opt → • %empty [":", "{"] 242 | • enum-head-name 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] $default reduce using rule 241 (enum-head-name-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 class-name go to state 55 decltype-specifier go to state 120 enum-head-name go to state 597 enum-head-name-opt go to state 394 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 395 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 767 using-directive → attribute-specifier-seq-opt "using" "namespace" • nested-name-specifier-opt namespace-name ";" IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 598 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 45 alignment-specifier → "alignas" "(" • type-id ELLIPSIS-opt ")" 46 | "alignas" "(" • constant-expression ELLIPSIS-opt ")" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 599 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 600 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
491 noptr-declarator → noptr-declarator • parameters-and-qualifiers 492 | noptr-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 591 ptr-declarator → noptr-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" shift, and go to state 346 "[" shift, and go to state 347 "(" [reduce using rule 591 (ptr-declarator)] $default reduce using rule 591 (ptr-declarator) parameters-and-qualifiers go to state 601
493 noptr-declarator → "(" ptr-declarator • ")" ")" shift, and go to state 602
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 594 ptr-operator → "&" attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "alignas" [reduce using rule 594 (ptr-operator)] "[" [reduce using rule 594 (ptr-operator)] $default reduce using rule 594 (ptr-operator) alignment-specifier go to state 165 attribute-specifier go to state 166
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" • string-literal ")" ";" 682 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 117 string-literal go to state 603
80 attribute-specifier → "[" "[" • attribute-using-prefix-opt attribute-list "]" "]" 87 attribute-using-prefix → • "using" attribute-namespace ":" 88 attribute-using-prefix-opt → • %empty [",", IDENTIFIER, "]"] 89 | • attribute-using-prefix "using" shift, and go to state 604 $default reduce using rule 88 (attribute-using-prefix-opt) attribute-using-prefix go to state 605 attribute-using-prefix-opt go to state 606
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 595 ptr-operator → "&&" attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "alignas" [reduce using rule 595 (ptr-operator)] "[" [reduce using rule 595 (ptr-operator)] $default reduce using rule 595 (ptr-operator) alignment-specifier go to state 165 attribute-specifier go to state 166
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 175 cv-qualifier → • "const" 176 | • "volatile" 177 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 179 | • cv-qualifier-seq 593 ptr-operator → "*" attribute-specifier-seq-opt • cv-qualifier-seq-opt "alignas" shift, and go to state 157 "[" shift, and go to state 161 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "alignas" [reduce using rule 178 (cv-qualifier-seq-opt)] "[" [reduce using rule 178 (cv-qualifier-seq-opt)] "const" [reduce using rule 178 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 178 (cv-qualifier-seq-opt)] $default reduce using rule 178 (cv-qualifier-seq-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 cv-qualifier go to state 607 cv-qualifier-seq go to state 608 cv-qualifier-seq-opt go to state 609
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 759 unqualified-id → "~" • type-name 760 | "~" • decltype-specifier IDENTIFIER shift, and go to state 506 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 507 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 508 typedef-name go to state 108
213 declarator-id → ELLIPSIS-opt id-expression • $default reduce using rule 213 (declarator-id)
21 TEMPLATE-opt → • %empty [IDENTIFIER, "operator", "~"] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 600 qualified-id → nested-name-specifier • TEMPLATE-opt unqualified-id IDENTIFIER shift, and go to state 197 "template" shift, and go to state 229 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 561
602 ref-qualifier → "&" • $default reduce using rule 602 (ref-qualifier)
603 ref-qualifier → "&&" • $default reduce using rule 603 (ref-qualifier)
605 ref-qualifier-opt → ref-qualifier • $default reduce using rule 605 (ref-qualifier-opt)
642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt • "[" identifier-list "]" initializer ";" "[" shift, and go to state 610
327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator • virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator • requires-clause function-body 621 requires-clause → • "requires" constraint-logical-or-expression 769 virt-specifier → • "override" 770 | • "final" 771 virt-specifier-seq → • virt-specifier 772 | • virt-specifier-seq virt-specifier 773 virt-specifier-seq-opt → • %empty ["=", ":", "{", "try"] 774 | • virt-specifier-seq "final" shift, and go to state 611 "requires" shift, and go to state 380 "override" shift, and go to state 612 $default reduce using rule 773 (virt-specifier-seq-opt) requires-clause go to state 613 virt-specifier go to state 614 virt-specifier-seq go to state 615 virt-specifier-seq-opt go to state 616
476 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator ";" • $default reduce using rule 476 (nodeclspec-function-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 490 noptr-declarator → declarator-id attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "[" [reduce using rule 490 (noptr-declarator)] $default reduce using rule 490 (noptr-declarator) alignment-specifier go to state 165 attribute-specifier go to state 166
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 596 ptr-operator → nested-name-specifier "*" • attribute-specifier-seq-opt cv-qualifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 617
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list 553 parameters-and-qualifiers → "(" • parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "..." reduce using rule 551 (parameter-declaration-list-opt) ")" reduce using rule 551 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 parameter-declaration go to state 618 parameter-declaration-clause go to state 619 parameter-declaration-list go to state 620 parameter-declaration-list-opt go to state 621
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 159 constant-expression-opt → • %empty ["]"] 160 | • constant-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 492 noptr-declarator → noptr-declarator "[" • constant-expression-opt "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 159 (constant-expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 622 constant-expression-opt go to state 623 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
212 declarator → noptr-declarator parameters-and-qualifiers • trailing-return-type 491 noptr-declarator → noptr-declarator parameters-and-qualifiers • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] 702 trailing-return-type → • "->" type-id "->" shift, and go to state 624 $default reduce using rule 491 (noptr-declarator) trailing-return-type go to state 625
592 ptr-declarator → ptr-operator ptr-declarator • $default reduce using rule 592 (ptr-declarator)
36 access-specifier → "private" • $default reduce using rule 36 (access-specifier)
37 access-specifier → "protected" • $default reduce using rule 37 (access-specifier)
38 access-specifier → "public" • $default reduce using rule 38 (access-specifier)
243 enum-key → "enum" • [IDENTIFIER, "::", "alignas", "[", "decltype"] 244 | "enum" • "class" 245 | "enum" • "struct" "class" shift, and go to state 130 "struct" shift, and go to state 131 $default reduce using rule 243 (enum-key)
424 member-specification → access-specifier • ":" member-specification-opt ":" shift, and go to state 626
412 member-declaration → alias-declaration • $default reduce using rule 412 (member-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", ";", "alignas", "(", "&", "[", ":", "&&", "operator", "decltype", "*", "~"] 192 | • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 327 function-definition → attribute-specifier-seq-opt • decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt • decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 404 member-declaration → attribute-specifier-seq-opt • decl-specifier-seq-opt member-declarator-list-opt ";" 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 191 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 191 (decl-specifier-seq-opt)] "alignas" [reduce using rule 191 (decl-specifier-seq-opt)] "[" [reduce using rule 191 (decl-specifier-seq-opt)] "decltype" [reduce using rule 191 (decl-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 191 (decl-specifier-seq-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 538 decl-specifier-seq-opt go to state 627 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
411 member-declaration → deduction-guide • $default reduce using rule 411 (member-declaration)
414 member-declaration → empty-declaration • $default reduce using rule 414 (member-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 496 opaque-enum-declaration → enum-key • attribute-specifier-seq-opt enum-head-name enum-base-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 628
410 member-declaration → explicit-specialization • $default reduce using rule 410 (member-declaration)
269 explicit-specifier-opt → explicit-specifier • $default reduce using rule 269 (explicit-specifier-opt)
405 member-declaration → function-definition • $default reduce using rule 405 (member-declaration)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 233 empty-declaration → • ";" 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 404 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 405 | • function-definition 406 | • using-declaration 407 | • using-enum-declaration 408 | • static_assert-declaration 409 | • template-declaration 410 | • explicit-specialization 411 | • deduction-guide 412 | • alias-declaration 413 | • opaque-enum-declaration 414 | • empty-declaration 423 member-specification → • member-declaration member-specification-opt 423 | member-declaration • member-specification-opt 424 | • access-specifier ":" member-specification-opt 425 member-specification-opt → • %empty ["}"] 426 | • member-specification 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 763 using-declaration → • "using" using-declarator-list ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 350 "protected" shift, and go to state 351 "public" shift, and go to state 352 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 353 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 425 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 354 alias-declaration go to state 355 attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 356 deduction-guide go to state 357 empty-declaration go to state 358 enum-key go to state 359 explicit-specialization go to state 360 explicit-specifier go to state 361 explicit-specifier-opt go to state 76 function-definition go to state 362 member-declaration go to state 363 member-specification go to state 364 member-specification-opt go to state 629 opaque-enum-declaration go to state 366 static_assert-declaration go to state 367 template-declaration go to state 368 template-head go to state 101 using-declaration go to state 369 using-enum-declaration go to state 370
426 member-specification-opt → member-specification • $default reduce using rule 426 (member-specification-opt)
142 class-specifier → class-head "{" member-specification-opt • "}" "}" shift, and go to state 630
413 member-declaration → opaque-enum-declaration • $default reduce using rule 413 (member-declaration)
408 member-declaration → static_assert-declaration • $default reduce using rule 408 (member-declaration)
409 member-declaration → template-declaration • $default reduce using rule 409 (member-declaration)
406 member-declaration → using-declaration • $default reduce using rule 406 (member-declaration)
407 member-declaration → using-enum-declaration • $default reduce using rule 407 (member-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 99 base-clause → ":" • base-specifier-list 102 base-specifier → • attribute-specifier-seq-opt class-or-decltype 103 | • attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | • attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 105 base-specifier-list → • base-specifier ELLIPSIS-opt 106 | • base-specifier-list "," base-specifier ELLIPSIS-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 631 base-specifier go to state 632 base-specifier-list go to state 633
101 base-clause-opt → base-clause • $default reduce using rule 101 (base-clause-opt)
132 class-head → class-key attribute-specifier-seq-opt base-clause-opt • $default reduce using rule 132 (class-head)
131 class-head → class-key attribute-specifier-seq-opt class-head-name • class-virt-specifier-opt base-clause-opt 143 class-virt-specifier → • "final" 144 class-virt-specifier-opt → • %empty [":", "{"] 145 | • class-virt-specifier "final" shift, and go to state 634 $default reduce using rule 144 (class-virt-specifier-opt) class-virt-specifier go to state 635 class-virt-specifier-opt go to state 636
133 class-head-name → nested-name-specifier-opt • class-name 137 class-name → • IDENTIFIER 138 | • simple-template-id 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 637 class-name go to state 638 simple-template-id go to state 639 template-name go to state 102
231 elaborated-type-specifier → class-key nested-name-specifier TEMPLATE-opt • simple-template-id 457 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 191 simple-template-id go to state 640 template-name go to state 102
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 brace-or-equal-initializer → "=" • initializer-clause 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 643 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 360 initializer → "(" • expression-list ")" 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression-list go to state 644 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 646 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 120 | "{" • initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 121 | "{" • designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 122 | "{" • "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 224 designated-initializer-clause → • designator brace-or-equal-initializer 225 designated-initializer-list → • designated-initializer-clause 226 | • designated-initializer-list "," designated-initializer-clause 227 designator → • "." IDENTIFIER 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "}" shift, and go to state 647 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "." shift, and go to state 648 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 designated-initializer-clause go to state 649 designated-initializer-list go to state 650 designator go to state 651 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 652 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
137 class-name → • IDENTIFIER 138 | • simple-template-id 162 constraint-logical-and-expression → • primary-expression 163 | • constraint-logical-and-expression "&&" primary-expression 164 constraint-logical-or-expression → • constraint-logical-and-expression 165 | • constraint-logical-or-expression "||" constraint-logical-and-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 621 requires-clause → "requires" • constraint-logical-or-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "::" shift, and go to state 6 "this" shift, and go to state 241 "(" shift, and go to state 653 "[" shift, and go to state 246 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "requires" shift, and go to state 250 "~" shift, and go to state 335 "literal" shift, and go to state 259 STRING_LITERAL shift, and go to state 117 class-name go to state 55 constraint-logical-and-expression go to state 654 constraint-logical-or-expression go to state 655 conversion-function-id go to state 272 decltype-specifier go to state 120 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 337 operator-function-id go to state 289 primary-expression go to state 656 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 305
359 initializer → brace-or-equal-initializer • $default reduce using rule 359 (initializer)
117 brace-or-equal-initializer → braced-init-list • $default reduce using rule 117 (brace-or-equal-initializer)
366 initializer-opt → initializer • $default reduce using rule 366 (initializer-opt)
348 init-declarator → declarator initializer-opt • $default reduce using rule 348 (init-declarator)
349 init-declarator → declarator requires-clause • $default reduce using rule 349 (init-declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 348 init-declarator → • declarator initializer-opt 349 | • declarator requires-clause 351 init-declarator-list → init-declarator-list "," • init-declarator 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator go to state 182 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 init-declarator go to state 657 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 172 ptr-declarator go to state 173 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
640 simple-declaration → decl-specifier-seq init-declarator-list-opt ";" • $default reduce using rule 640 (simple-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 249 enumerator → IDENTIFIER • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 658
250 enumerator-definition → enumerator • [",", "}"] 251 | enumerator • "=" constant-expression "=" shift, and go to state 659 $default reduce using rule 250 (enumerator-definition)
252 enumerator-list → enumerator-definition • $default reduce using rule 252 (enumerator-list)
248 enum-specifier → enum-head "{" enumerator-list • "," "}" 253 enumerator-list → enumerator-list • "," enumerator-definition 255 enumerator-list-opt → enumerator-list • ["}"] "," shift, and go to state 660 $default reduce using rule 255 (enumerator-list-opt)
247 enum-specifier → enum-head "{" enumerator-list-opt • "}" "}" shift, and go to state 661
236 enum-base → • ":" type-specifier-seq 237 enum-base-opt → • %empty [";"] 238 | • enum-base 242 enum-head-name-opt → enum-head-name • [":", "{"] 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name • enum-base-opt ";" ":" shift, and go to state 662 ":" [reduce using rule 242 (enum-head-name-opt)] "{" reduce using rule 242 (enum-head-name-opt) $default reduce using rule 237 (enum-base-opt) enum-base go to state 663 enum-base-opt go to state 664
236 enum-base → • ":" type-specifier-seq 237 enum-base-opt → • %empty ["{"] 238 | • enum-base 239 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt • enum-base-opt ":" shift, and go to state 662 $default reduce using rule 237 (enum-base-opt) enum-base go to state 663 enum-base-opt go to state 665
240 enum-head-name → nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 666
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 215 deduction-guide → explicit-specifier-opt template-name "(" • parameter-declaration-clause ")" "->" simple-template-id ";" 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list "..." reduce using rule 551 (parameter-declaration-list-opt) ")" reduce using rule 551 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 parameter-declaration go to state 618 parameter-declaration-clause go to state 667 parameter-declaration-list go to state 620 parameter-declaration-list-opt go to state 621
427 module-declaration → EXPORT-opt "module" • module-name module-partition-opt attribute-specifier-seq-opt ";" 431 module-name → • module-name-qualifier-opt IDENTIFIER 432 module-name-qualifier → • IDENTIFIER "." 433 | • module-name-qualifier IDENTIFIER "." 434 module-name-qualifier-opt → • %empty [IDENTIFIER] 435 | • module-name-qualifier IDENTIFIER shift, and go to state 136 IDENTIFIER [reduce using rule 434 (module-name-qualifier-opt)] module-name go to state 668 module-name-qualifier go to state 141 module-name-qualifier-opt go to state 142
584 private-module-fragment → • "module" ":" "private" ";" declaration-seq-opt 585 private-module-fragment-opt → • %empty [$end] 586 | • private-module-fragment 706 translation-unit → global-module-fragment-opt module-declaration declaration-seq-opt • private-module-fragment-opt "module" shift, and go to state 669 $default reduce using rule 585 (private-module-fragment-opt) private-module-fragment go to state 670 private-module-fragment-opt go to state 671
456 nested-name-specifier → nested-name-specifier IDENTIFIER "::" • $default reduce using rule 456 (nested-name-specifier)
646 simple-type-specifier → nested-name-specifier "template" simple-template-id • $default reduce using rule 646 (simple-type-specifier)
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" "::" shift, and go to state 672
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 709 | nested-name-specifier-opt concept-name "<" • template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 406 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 407 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-argument go to state 409 template-argument-list go to state 410 template-argument-list-opt go to state 673 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 412 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
151 concept-name → IDENTIFIER • $default reduce using rule 151 (concept-name)
150 concept-definition → "concept" concept-name • "=" constraint-expression ";" "=" shift, and go to state 674
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "alignas", "[", "decltype"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 229 elaborated-type-specifier → class-key • attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | class-key • simple-template-id 231 | class-key • nested-name-specifier TEMPLATE-opt simple-template-id 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 675 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 178 simple-template-id go to state 179 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
683 template-argument → constant-expression • $default reduce using rule 683 (template-argument)
580 primary-expression → id-expression • [",", "...", "+", "-", "(", "&", "[", "<=>", "?", "&&", "||", "->", ".", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "++", "--"] 685 template-argument → id-expression • [",", "...", ">"] "," reduce using rule 580 (primary-expression) "," [reduce using rule 685 (template-argument)] "..." reduce using rule 580 (primary-expression) "..." [reduce using rule 685 (template-argument)] ">" reduce using rule 580 (primary-expression) ">" [reduce using rule 685 (template-argument)] $default reduce using rule 580 (primary-expression)
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 562 postfix-expression → simple-type-specifier • "(" expression-list-opt ")" 564 | simple-type-specifier • braced-init-list 725 type-specifier → simple-type-specifier • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", ")", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", ">", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 577 "{" shift, and go to state 379 "(" [reduce using rule 725 (type-specifier)] $default reduce using rule 725 (type-specifier) braced-init-list go to state 578
5 ELLIPSIS-opt → • %empty [",", ">"] 6 | • "..." 686 template-argument-list → template-argument • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 676
687 template-argument-list → template-argument-list • "," template-argument ELLIPSIS-opt 689 template-argument-list-opt → template-argument-list • [">"] "," shift, and go to state 677 $default reduce using rule 689 (template-argument-list-opt)
644 simple-template-id → template-name "<" template-argument-list-opt • ">" ">" shift, and go to state 678
684 template-argument → type-id • $default reduce using rule 684 (template-argument)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 84 | • attribute-specifier-seq 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 729 | type-specifier • attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 730 | type-specifier • type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 679 class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 680 typedef-name go to state 108 typename-specifier go to state 109
29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 712 type-id → type-specifier-seq • abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 681 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 682 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "..." [reduce using rule 32 (abstract-declarator-opt)] "(" [reduce using rule 32 (abstract-declarator-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) $default reduce using rule 32 (abstract-declarator-opt) abstract-declarator go to state 683 abstract-declarator-opt go to state 684 abstract-pack-declarator go to state 685 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 687 noptr-abstract-pack-declarator go to state 688 ptr-abstract-declarator go to state 689 ptr-operator go to state 690 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 563 postfix-expression → typename-specifier • "(" expression-list-opt ")" 565 | typename-specifier • braced-init-list 727 type-specifier → typename-specifier • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", ")", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", ">", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 579 "{" shift, and go to state 379 "(" [reduce using rule 727 (type-specifier)] $default reduce using rule 727 (type-specifier) braced-init-list go to state 580
555 placeholder-type-specifier → type-constraint-opt "decltype" "(" • "auto" ")" "auto" shift, and go to state 691
271 export-declaration → "export" "{" declaration-seq-opt "}" • $default reduce using rule 271 (export-declaration)
390 linkage-specification → "extern" string-literal "{" declaration-seq-opt • "}" "}" shift, and go to state 692
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 692 | "template" "<" • template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 697 template-parameter → • type-parameter 698 | • parameter-declaration 699 template-parameter-list → • template-parameter 700 | • template-parameter-list "," template-parameter 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 716 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | • type-parameter-key IDENTIFIER-opt "=" type-id 718 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | • type-constraint IDENTIFIER-opt "=" type-id 720 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 215 "typename" shift, and go to state 216 "class" shift, and go to state 217 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 220 parameter-declaration go to state 221 simple-template-id go to state 96 template-head go to state 222 template-name go to state 102 template-parameter go to state 223 template-parameter-list go to state 224 type-constraint go to state 225 type-name go to state 106 type-parameter go to state 226 type-parameter-key go to state 227 typedef-name go to state 108
265 explicit-specialization → "template" "<" ">" declaration • $default reduce using rule 265 (explicit-specialization)
24 THIS-opt → "this" • $default reduce using rule 24 (THIS-opt)
131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → attribute-specifier-seq-opt THIS-opt • decl-specifier-seq declarator 544 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq declarator "=" initializer-clause 545 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq abstract-declarator-opt 546 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq abstract-declarator-opt "=" initializer-clause 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 693 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 720 type-parameter → template-head type-parameter-key • ELLIPSIS-opt IDENTIFIER-opt 721 | template-head type-parameter-key • IDENTIFIER-opt "=" id-expression "..." shift, and go to state 155 IDENTIFIER shift, and go to state 426 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 694 IDENTIFIER-opt go to state 695
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 697 template-parameter → • type-parameter 698 | • parameter-declaration 700 template-parameter-list → template-parameter-list "," • template-parameter 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 716 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | • type-parameter-key IDENTIFIER-opt "=" type-id 718 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | • type-constraint IDENTIFIER-opt "=" type-id 720 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 215 "typename" shift, and go to state 216 "class" shift, and go to state 217 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 220 parameter-declaration go to state 221 simple-template-id go to state 96 template-head go to state 222 template-name go to state 102 template-parameter go to state 696 type-constraint go to state 225 type-name go to state 106 type-parameter go to state 226 type-parameter-key go to state 227 typedef-name go to state 108
621 requires-clause → • "requires" constraint-logical-or-expression 622 requires-clause-opt → • %empty ["constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "using", ";", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "concept", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] 623 | • requires-clause 692 template-head → "template" "<" template-parameter-list ">" • requires-clause-opt "requires" shift, and go to state 380 $default reduce using rule 622 (requires-clause-opt) requires-clause go to state 697 requires-clause-opt go to state 698
12 IDENTIFIER-opt → IDENTIFIER • $default reduce using rule 12 (IDENTIFIER-opt)
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 718 type-parameter → type-constraint ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 426 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 699
719 type-parameter → type-constraint IDENTIFIER-opt • "=" type-id "=" shift, and go to state 700
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 716 type-parameter → type-parameter-key ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 426 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 701
717 type-parameter → type-parameter-key IDENTIFIER-opt • "=" type-id "=" shift, and go to state 702
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" 734 typename-specifier → "typename" nested-name-specifier TEMPLATE-opt simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 672 "::" [reduce using rule 734 (typename-specifier)] $default reduce using rule 734 (typename-specifier)
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" • defining-type-id ";" 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 216 defining-type-id → • defining-type-specifier-seq abstract-declarator-opt 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 220 defining-type-specifier-seq → • defining-type-specifier attribute-specifier-seq-opt 221 | • defining-type-specifier defining-type-specifier-seq 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decltype-specifier go to state 63 defining-type-id go to state 703 defining-type-specifier go to state 704 defining-type-specifier-seq go to state 705 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
456 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" 696 template-name → IDENTIFIER • ["<"] 755 unqualified-id → IDENTIFIER • [",", "...", ";"] "::" shift, and go to state 399 "<" reduce using rule 696 (template-name) $default reduce using rule 755 (unqualified-id)
693 template-id → simple-template-id • $default reduce using rule 693 (template-id)
764 using-declarator → TYPENAME-opt nested-name-specifier unqualified-id • $default reduce using rule 764 (using-declarator)
5 ELLIPSIS-opt → • %empty [",", ";"] 6 | • "..." 766 using-declarator-list → using-declarator-list "," using-declarator • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 706
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 477 | "noexcept" "(" • expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 707 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
286 fold-expression → "(" "..." • fold-operator cast-expression ")" 288 fold-operator → • "+" 289 | • "-" 290 | • "*" 291 | • "/" 292 | • "%" 293 | • "^" 294 | • "&" 295 | • "|" 296 | • "<<" 297 | • ">>" 298 | • "+=" 299 | • "-=" 300 | • "*=" 301 | • "/=" 302 | • "%=" 303 | • "^=" 304 | • "&=" 305 | • "|=" 306 | • "<<=" 307 | • ">>=" 308 | • "=" 309 | • "==" 310 | • "!=" 311 | • "<" 312 | • ">" 313 | • "<=" 314 | • ">=" 315 | • "&&" 316 | • "||" 317 | • "," 318 | • ".*" 319 | • "->*" "," shift, and go to state 708 "+" shift, and go to state 709 "-" shift, and go to state 710 "=" shift, and go to state 711 "&" shift, and go to state 712 "*=" shift, and go to state 713 "/=" shift, and go to state 714 "%=" shift, and go to state 715 "+=" shift, and go to state 716 "-=" shift, and go to state 717 ">>=" shift, and go to state 718 "<<=" shift, and go to state 719 "&=" shift, and go to state 720 "^=" shift, and go to state 721 "|=" shift, and go to state 722 "&&" shift, and go to state 723 "||" shift, and go to state 724 "==" shift, and go to state 725 "!=" shift, and go to state 726 "^" shift, and go to state 727 "<" shift, and go to state 728 ">" shift, and go to state 729 "*" shift, and go to state 730 "/" shift, and go to state 731 "%" shift, and go to state 732 "|" shift, and go to state 733 "<<" shift, and go to state 734 ">>" shift, and go to state 735 "<=" shift, and go to state 736 ">=" shift, and go to state 737 ".*" shift, and go to state 738 "->*" shift, and go to state 739 fold-operator go to state 740
285 fold-expression → "(" cast-expression • fold-operator "..." ")" 287 | "(" cast-expression • fold-operator "..." fold-operator cast-expression ")" 288 fold-operator → • "+" 289 | • "-" 290 | • "*" 291 | • "/" 292 | • "%" 293 | • "^" 294 | • "&" 295 | • "|" 296 | • "<<" 297 | • ">>" 298 | • "+=" 299 | • "-=" 300 | • "*=" 301 | • "/=" 302 | • "%=" 303 | • "^=" 304 | • "&=" 305 | • "|=" 306 | • "<<=" 307 | • ">>=" 308 | • "=" 309 | • "==" 310 | • "!=" 311 | • "<" 312 | • ">" 313 | • "<=" 314 | • ">=" 315 | • "&&" 316 | • "||" 317 | • "," 318 | • ".*" 319 | • "->*" 556 pm-expression → cast-expression • [",", "+", "-", "=", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "," shift, and go to state 708 "+" shift, and go to state 709 "-" shift, and go to state 710 "=" shift, and go to state 711 "&" shift, and go to state 712 "*=" shift, and go to state 713 "/=" shift, and go to state 714 "%=" shift, and go to state 715 "+=" shift, and go to state 716 "-=" shift, and go to state 717 ">>=" shift, and go to state 718 "<<=" shift, and go to state 719 "&=" shift, and go to state 720 "^=" shift, and go to state 721 "|=" shift, and go to state 722 "&&" shift, and go to state 723 "||" shift, and go to state 724 "==" shift, and go to state 725 "!=" shift, and go to state 726 "^" shift, and go to state 727 "<" shift, and go to state 728 ">" shift, and go to state 729 "*" shift, and go to state 730 "/" shift, and go to state 731 "%" shift, and go to state 732 "|" shift, and go to state 733 "<<" shift, and go to state 734 ">>" shift, and go to state 735 "<=" shift, and go to state 736 ">=" shift, and go to state 737 ".*" shift, and go to state 738 "->*" shift, and go to state 739 "," [reduce using rule 556 (pm-expression)] "+" [reduce using rule 556 (pm-expression)] "-" [reduce using rule 556 (pm-expression)] "=" [reduce using rule 556 (pm-expression)] "&" [reduce using rule 556 (pm-expression)] "*=" [reduce using rule 556 (pm-expression)] "/=" [reduce using rule 556 (pm-expression)] "%=" [reduce using rule 556 (pm-expression)] "+=" [reduce using rule 556 (pm-expression)] "-=" [reduce using rule 556 (pm-expression)] ">>=" [reduce using rule 556 (pm-expression)] "<<=" [reduce using rule 556 (pm-expression)] "&=" [reduce using rule 556 (pm-expression)] "^=" [reduce using rule 556 (pm-expression)] "|=" [reduce using rule 556 (pm-expression)] "&&" [reduce using rule 556 (pm-expression)] "||" [reduce using rule 556 (pm-expression)] "==" [reduce using rule 556 (pm-expression)] "!=" [reduce using rule 556 (pm-expression)] "^" [reduce using rule 556 (pm-expression)] "<" [reduce using rule 556 (pm-expression)] ">" [reduce using rule 556 (pm-expression)] "*" [reduce using rule 556 (pm-expression)] "/" [reduce using rule 556 (pm-expression)] "%" [reduce using rule 556 (pm-expression)] "|" [reduce using rule 556 (pm-expression)] "<<" [reduce using rule 556 (pm-expression)] ">>" [reduce using rule 556 (pm-expression)] "<=" [reduce using rule 556 (pm-expression)] ">=" [reduce using rule 556 (pm-expression)] ".*" [reduce using rule 556 (pm-expression)] "->*" [reduce using rule 556 (pm-expression)] $default reduce using rule 556 (pm-expression) fold-operator go to state 741
278 expression → expression • "," assignment-expression 579 primary-expression → "(" expression • ")" "," shift, and go to state 533 ")" shift, and go to state 742
130 cast-expression → "(" type-id • ")" cast-expression ")" shift, and go to state 743
5 ELLIPSIS-opt → • %empty [",", "]"] 6 | • "..." 636 simple-capture → IDENTIFIER • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 744
638 simple-capture → "this" • $default reduce using rule 638 (simple-capture)
126 capture-default → "=" • $default reduce using rule 126 (capture-default)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 125 capture-default → "&" • [",", "]"] 347 init-capture → "&" • ELLIPSIS-opt IDENTIFIER initializer 637 simple-capture → "&" • IDENTIFIER ELLIPSIS-opt "..." shift, and go to state 155 IDENTIFIER shift, and go to state 745 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 125 (capture-default) ELLIPSIS-opt go to state 746
639 simple-capture → "*" • "this" "this" shift, and go to state 747
346 init-capture → ELLIPSIS-opt • IDENTIFIER initializer IDENTIFIER shift, and go to state 748
127 capture-list → capture • $default reduce using rule 127 (capture-list)
379 lambda-capture → capture-default • ["]"] 381 | capture-default • "," capture-list "," shift, and go to state 749 $default reduce using rule 379 (lambda-capture)
128 capture-list → capture-list • "," capture 380 lambda-capture → capture-list • ["]"] "," shift, and go to state 750 $default reduce using rule 380 (lambda-capture)
124 capture → init-capture • $default reduce using rule 124 (capture)
383 lambda-capture-opt → lambda-capture • $default reduce using rule 383 (lambda-capture-opt)
388 lambda-introducer → "[" lambda-capture-opt • "]" "]" shift, and go to state 751
123 capture → simple-capture • $default reduce using rule 123 (capture)
90 await-expression → "co_await" cast-expression • $default reduce using rule 90 (await-expression)
542 overloadable-operator → "," • $default reduce using rule 542 (overloadable-operator)
509 overloadable-operator → "!" • $default reduce using rule 509 (overloadable-operator)
510 overloadable-operator → "+" • $default reduce using rule 510 (overloadable-operator)
511 overloadable-operator → "-" • $default reduce using rule 511 (overloadable-operator)
518 overloadable-operator → "=" • $default reduce using rule 518 (overloadable-operator)
504 overloadable-operator → "(" • ")" ")" shift, and go to state 752
516 overloadable-operator → "&" • $default reduce using rule 516 (overloadable-operator)
521 overloadable-operator → "*=" • $default reduce using rule 521 (overloadable-operator)
522 overloadable-operator → "/=" • $default reduce using rule 522 (overloadable-operator)
523 overloadable-operator → "%=" • $default reduce using rule 523 (overloadable-operator)
519 overloadable-operator → "+=" • $default reduce using rule 519 (overloadable-operator)
520 overloadable-operator → "-=" • $default reduce using rule 520 (overloadable-operator)
539 overloadable-operator → ">>=" • $default reduce using rule 539 (overloadable-operator)
538 overloadable-operator → "<<=" • $default reduce using rule 538 (overloadable-operator)
525 overloadable-operator → "&=" • $default reduce using rule 525 (overloadable-operator)
524 overloadable-operator → "^=" • $default reduce using rule 524 (overloadable-operator)
526 overloadable-operator → "|=" • $default reduce using rule 526 (overloadable-operator)
505 overloadable-operator → "[" • "]" "]" shift, and go to state 753
503 overloadable-operator → "co_await" • $default reduce using rule 503 (overloadable-operator)
533 overloadable-operator → "<=>" • $default reduce using rule 533 (overloadable-operator)
534 overloadable-operator → "&&" • $default reduce using rule 534 (overloadable-operator)
535 overloadable-operator → "||" • $default reduce using rule 535 (overloadable-operator)
506 overloadable-operator → "->" • $default reduce using rule 506 (overloadable-operator)
500 overloadable-operator → "delete" • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 502 | "delete" • "[" "]" "[" shift, and go to state 754 "[" [reduce using rule 500 (overloadable-operator)] $default reduce using rule 500 (overloadable-operator)
527 overloadable-operator → "==" • $default reduce using rule 527 (overloadable-operator)
528 overloadable-operator → "!=" • $default reduce using rule 528 (overloadable-operator)
515 overloadable-operator → "^" • $default reduce using rule 515 (overloadable-operator)
529 overloadable-operator → "<" • $default reduce using rule 529 (overloadable-operator)
530 overloadable-operator → ">" • $default reduce using rule 530 (overloadable-operator)
512 overloadable-operator → "*" • $default reduce using rule 512 (overloadable-operator)
513 overloadable-operator → "/" • $default reduce using rule 513 (overloadable-operator)
514 overloadable-operator → "%" • $default reduce using rule 514 (overloadable-operator)
517 overloadable-operator → "|" • $default reduce using rule 517 (overloadable-operator)
536 overloadable-operator → "<<" • $default reduce using rule 536 (overloadable-operator)
537 overloadable-operator → ">>" • $default reduce using rule 537 (overloadable-operator)
531 overloadable-operator → "<=" • $default reduce using rule 531 (overloadable-operator)
532 overloadable-operator → ">=" • $default reduce using rule 532 (overloadable-operator)
507 overloadable-operator → "->*" • $default reduce using rule 507 (overloadable-operator)
499 overloadable-operator → "new" • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 501 | "new" • "[" "]" "[" shift, and go to state 755 "[" [reduce using rule 499 (overloadable-operator)] $default reduce using rule 499 (overloadable-operator)
508 overloadable-operator → "~" • $default reduce using rule 508 (overloadable-operator)
540 overloadable-operator → "++" • $default reduce using rule 540 (overloadable-operator)
541 overloadable-operator → "--" • $default reduce using rule 541 (overloadable-operator)
169 conversion-function-id → "operator" conversion-type-id • $default reduce using rule 169 (conversion-function-id)
497 operator-function-id → "operator" overloadable-operator • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 498 | "operator" overloadable-operator • "<" template-argument-list-opt ">" "<" shift, and go to state 756 "<" [reduce using rule 497 (operator-function-id)] $default reduce using rule 497 (operator-function-id)
392 literal-operator-id → "operator" string-literal • IDENTIFIER 735 ud-suffix → • IDENTIFIER 762 user-defined-string-literal → string-literal • ud-suffix IDENTIFIER shift, and go to state 757 ud-suffix go to state 758
137 class-name → • IDENTIFIER 138 | • simple-template-id 166 conversion-declarator → • ptr-operator conversion-declarator-opt 167 conversion-declarator-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 168 | • conversion-declarator 170 conversion-type-id → type-specifier-seq • conversion-declarator-opt 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 167 (conversion-declarator-opt)] "::" [reduce using rule 167 (conversion-declarator-opt)] "&" [reduce using rule 167 (conversion-declarator-opt)] "&&" [reduce using rule 167 (conversion-declarator-opt)] "decltype" [reduce using rule 167 (conversion-declarator-opt)] "*" [reduce using rule 167 (conversion-declarator-opt)] $default reduce using rule 167 (conversion-declarator-opt) class-name go to state 55 conversion-declarator go to state 759 conversion-declarator-opt go to state 760 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 ptr-operator go to state 761 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
393 literal-operator-id → "operator" user-defined-string-literal • $default reduce using rule 393 (literal-operator-id)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list 616 requirement-parameter-list → "(" • parameter-declaration-clause ")" "..." reduce using rule 551 (parameter-declaration-list-opt) ")" reduce using rule 551 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 parameter-declaration go to state 618 parameter-declaration-clause go to state 762 parameter-declaration-list go to state 620 parameter-declaration-list-opt go to state 621
618 requirement-parameter-list-opt → requirement-parameter-list • $default reduce using rule 618 (requirement-parameter-list-opt)
615 requirement-body → • "{" requirement-seq "}" 624 requires-expression → "requires" requirement-parameter-list-opt • requirement-body "{" shift, and go to state 763 requirement-body go to state 764
137 class-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 246 enum-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 137 (class-name) "," [reduce using rule 246 (enum-name)] "," [reduce using rule 731 (typedef-name)] "constexpr" reduce using rule 137 (class-name) "constexpr" [reduce using rule 246 (enum-name)] "constexpr" [reduce using rule 731 (typedef-name)] "..." reduce using rule 137 (class-name) "..." [reduce using rule 246 (enum-name)] "..." [reduce using rule 731 (typedef-name)] "export" reduce using rule 137 (class-name) "export" [reduce using rule 246 (enum-name)] "export" [reduce using rule 731 (typedef-name)] "extern" reduce using rule 137 (class-name) "extern" [reduce using rule 246 (enum-name)] "extern" [reduce using rule 731 (typedef-name)] IDENTIFIER reduce using rule 137 (class-name) IDENTIFIER [reduce using rule 246 (enum-name)] IDENTIFIER [reduce using rule 731 (typedef-name)] "inline" reduce using rule 137 (class-name) "inline" [reduce using rule 246 (enum-name)] "inline" [reduce using rule 731 (typedef-name)] "noexcept" reduce using rule 137 (class-name) "noexcept" [reduce using rule 246 (enum-name)] "noexcept" [reduce using rule 731 (typedef-name)] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 731 (typedef-name)] "template" reduce using rule 137 (class-name) "template" [reduce using rule 246 (enum-name)] "template" [reduce using rule 731 (typedef-name)] "typename" reduce using rule 137 (class-name) "typename" [reduce using rule 246 (enum-name)] "typename" [reduce using rule 731 (typedef-name)] "virtual" reduce using rule 137 (class-name) "virtual" [reduce using rule 246 (enum-name)] "virtual" [reduce using rule 731 (typedef-name)] "+" reduce using rule 137 (class-name) "+" [reduce using rule 246 (enum-name)] "+" [reduce using rule 731 (typedef-name)] "-" reduce using rule 137 (class-name) "-" [reduce using rule 246 (enum-name)] "-" [reduce using rule 731 (typedef-name)] "using" reduce using rule 137 (class-name) "using" [reduce using rule 246 (enum-name)] "using" [reduce using rule 731 (typedef-name)] "=" reduce using rule 137 (class-name) "=" [reduce using rule 246 (enum-name)] "=" [reduce using rule 731 (typedef-name)] ";" reduce using rule 137 (class-name) ";" [reduce using rule 246 (enum-name)] ";" [reduce using rule 731 (typedef-name)] "alignas" reduce using rule 137 (class-name) "alignas" [reduce using rule 246 (enum-name)] "alignas" [reduce using rule 731 (typedef-name)] "(" reduce using rule 137 (class-name) "(" [reduce using rule 246 (enum-name)] "(" [reduce using rule 731 (typedef-name)] ")" reduce using rule 137 (class-name) ")" [reduce using rule 246 (enum-name)] ")" [reduce using rule 731 (typedef-name)] "&" reduce using rule 137 (class-name) "&" [reduce using rule 246 (enum-name)] "&" [reduce using rule 731 (typedef-name)] "asm" reduce using rule 137 (class-name) "asm" [reduce using rule 246 (enum-name)] "asm" [reduce using rule 731 (typedef-name)] "*=" reduce using rule 137 (class-name) "*=" [reduce using rule 246 (enum-name)] "*=" [reduce using rule 731 (typedef-name)] "/=" reduce using rule 137 (class-name) "/=" [reduce using rule 246 (enum-name)] "/=" [reduce using rule 731 (typedef-name)] "%=" reduce using rule 137 (class-name) "%=" [reduce using rule 246 (enum-name)] "%=" [reduce using rule 731 (typedef-name)] "+=" reduce using rule 137 (class-name) "+=" [reduce using rule 246 (enum-name)] "+=" [reduce using rule 731 (typedef-name)] "-=" reduce using rule 137 (class-name) "-=" [reduce using rule 246 (enum-name)] "-=" [reduce using rule 731 (typedef-name)] ">>=" reduce using rule 137 (class-name) ">>=" [reduce using rule 246 (enum-name)] ">>=" [reduce using rule 731 (typedef-name)] "<<=" reduce using rule 137 (class-name) "<<=" [reduce using rule 246 (enum-name)] "<<=" [reduce using rule 731 (typedef-name)] "&=" reduce using rule 137 (class-name) "&=" [reduce using rule 246 (enum-name)] "&=" [reduce using rule 731 (typedef-name)] "^=" reduce using rule 137 (class-name) "^=" [reduce using rule 246 (enum-name)] "^=" [reduce using rule 731 (typedef-name)] "|=" reduce using rule 137 (class-name) "|=" [reduce using rule 246 (enum-name)] "|=" [reduce using rule 731 (typedef-name)] "[" reduce using rule 137 (class-name) "[" [reduce using rule 246 (enum-name)] "[" [reduce using rule 731 (typedef-name)] "]" reduce using rule 137 (class-name) "]" [reduce using rule 246 (enum-name)] "]" [reduce using rule 731 (typedef-name)] ":" reduce using rule 137 (class-name) ":" [reduce using rule 246 (enum-name)] ":" [reduce using rule 731 (typedef-name)] "{" reduce using rule 137 (class-name) "{" [reduce using rule 246 (enum-name)] "{" [reduce using rule 731 (typedef-name)] "}" reduce using rule 137 (class-name) "}" [reduce using rule 246 (enum-name)] "}" [reduce using rule 731 (typedef-name)] "class" reduce using rule 137 (class-name) "class" [reduce using rule 246 (enum-name)] "class" [reduce using rule 731 (typedef-name)] "struct" reduce using rule 137 (class-name) "struct" [reduce using rule 246 (enum-name)] "struct" [reduce using rule 731 (typedef-name)] "union" reduce using rule 137 (class-name) "union" [reduce using rule 246 (enum-name)] "union" [reduce using rule 731 (typedef-name)] "final" reduce using rule 137 (class-name) "final" [reduce using rule 246 (enum-name)] "final" [reduce using rule 731 (typedef-name)] "<=>" reduce using rule 137 (class-name) "<=>" [reduce using rule 246 (enum-name)] "<=>" [reduce using rule 731 (typedef-name)] "concept" reduce using rule 137 (class-name) "concept" [reduce using rule 246 (enum-name)] "concept" [reduce using rule 731 (typedef-name)] "?" reduce using rule 137 (class-name) "?" [reduce using rule 246 (enum-name)] "?" [reduce using rule 731 (typedef-name)] "&&" reduce using rule 137 (class-name) "&&" [reduce using rule 246 (enum-name)] "&&" [reduce using rule 731 (typedef-name)] "||" reduce using rule 137 (class-name) "||" [reduce using rule 246 (enum-name)] "||" [reduce using rule 731 (typedef-name)] "operator" reduce using rule 137 (class-name) "operator" [reduce using rule 246 (enum-name)] "operator" [reduce using rule 731 (typedef-name)] "const" reduce using rule 137 (class-name) "const" [reduce using rule 246 (enum-name)] "const" [reduce using rule 731 (typedef-name)] "volatile" reduce using rule 137 (class-name) "volatile" [reduce using rule 246 (enum-name)] "volatile" [reduce using rule 731 (typedef-name)] "friend" reduce using rule 137 (class-name) "friend" [reduce using rule 246 (enum-name)] "friend" [reduce using rule 731 (typedef-name)] "typedef" reduce using rule 137 (class-name) "typedef" [reduce using rule 246 (enum-name)] "typedef" [reduce using rule 731 (typedef-name)] "consteval" reduce using rule 137 (class-name) "consteval" [reduce using rule 246 (enum-name)] "consteval" [reduce using rule 731 (typedef-name)] "constinit" reduce using rule 137 (class-name) "constinit" [reduce using rule 246 (enum-name)] "constinit" [reduce using rule 731 (typedef-name)] "decltype" reduce using rule 137 (class-name) "decltype" [reduce using rule 246 (enum-name)] "decltype" [reduce using rule 731 (typedef-name)] "->" reduce using rule 137 (class-name) "->" [reduce using rule 246 (enum-name)] "->" [reduce using rule 731 (typedef-name)] "." reduce using rule 137 (class-name) "." [reduce using rule 246 (enum-name)] "." [reduce using rule 731 (typedef-name)] "enum" reduce using rule 137 (class-name) "enum" [reduce using rule 246 (enum-name)] "enum" [reduce using rule 731 (typedef-name)] "==" reduce using rule 137 (class-name) "==" [reduce using rule 246 (enum-name)] "==" [reduce using rule 731 (typedef-name)] "!=" reduce using rule 137 (class-name) "!=" [reduce using rule 246 (enum-name)] "!=" [reduce using rule 731 (typedef-name)] "^" reduce using rule 137 (class-name) "^" [reduce using rule 246 (enum-name)] "^" [reduce using rule 731 (typedef-name)] "<" reduce using rule 137 (class-name) "<" [reduce using rule 246 (enum-name)] "<" [reduce using rule 696 (template-name)] "<" [reduce using rule 731 (typedef-name)] ">" reduce using rule 137 (class-name) ">" [reduce using rule 246 (enum-name)] ">" [reduce using rule 731 (typedef-name)] "explicit" reduce using rule 137 (class-name) "explicit" [reduce using rule 246 (enum-name)] "explicit" [reduce using rule 731 (typedef-name)] "*" reduce using rule 137 (class-name) "*" [reduce using rule 246 (enum-name)] "*" [reduce using rule 731 (typedef-name)] "/" reduce using rule 137 (class-name) "/" [reduce using rule 246 (enum-name)] "/" [reduce using rule 731 (typedef-name)] "%" reduce using rule 137 (class-name) "%" [reduce using rule 246 (enum-name)] "%" [reduce using rule 731 (typedef-name)] "|" reduce using rule 137 (class-name) "|" [reduce using rule 246 (enum-name)] "|" [reduce using rule 731 (typedef-name)] "<<" reduce using rule 137 (class-name) "<<" [reduce using rule 246 (enum-name)] "<<" [reduce using rule 731 (typedef-name)] ">>" reduce using rule 137 (class-name) ">>" [reduce using rule 246 (enum-name)] ">>" [reduce using rule 731 (typedef-name)] "<=" reduce using rule 137 (class-name) "<=" [reduce using rule 246 (enum-name)] "<=" [reduce using rule 731 (typedef-name)] ">=" reduce using rule 137 (class-name) ">=" [reduce using rule 246 (enum-name)] ">=" [reduce using rule 731 (typedef-name)] ".*" reduce using rule 137 (class-name) ".*" [reduce using rule 246 (enum-name)] ".*" [reduce using rule 731 (typedef-name)] "->*" reduce using rule 137 (class-name) "->*" [reduce using rule 246 (enum-name)] "->*" [reduce using rule 731 (typedef-name)] "try" reduce using rule 137 (class-name) "try" [reduce using rule 246 (enum-name)] "try" [reduce using rule 731 (typedef-name)] "import" reduce using rule 137 (class-name) "import" [reduce using rule 246 (enum-name)] "import" [reduce using rule 731 (typedef-name)] "namespace" reduce using rule 137 (class-name) "namespace" [reduce using rule 246 (enum-name)] "namespace" [reduce using rule 731 (typedef-name)] "requires" reduce using rule 137 (class-name) "requires" [reduce using rule 246 (enum-name)] "requires" [reduce using rule 731 (typedef-name)] "~" reduce using rule 137 (class-name) "~" [reduce using rule 246 (enum-name)] "~" [reduce using rule 731 (typedef-name)] "++" reduce using rule 137 (class-name) "++" [reduce using rule 246 (enum-name)] "++" [reduce using rule 731 (typedef-name)] "--" reduce using rule 137 (class-name) "--" [reduce using rule 246 (enum-name)] "--" [reduce using rule 731 (typedef-name)] "auto" reduce using rule 137 (class-name) "auto" [reduce using rule 246 (enum-name)] "auto" [reduce using rule 731 (typedef-name)] "char" reduce using rule 137 (class-name) "char" [reduce using rule 246 (enum-name)] "char" [reduce using rule 731 (typedef-name)] "char8_t" reduce using rule 137 (class-name) "char8_t" [reduce using rule 246 (enum-name)] "char8_t" [reduce using rule 731 (typedef-name)] "char16_t" reduce using rule 137 (class-name) "char16_t" [reduce using rule 246 (enum-name)] "char16_t" [reduce using rule 731 (typedef-name)] "char32_t" reduce using rule 137 (class-name) "char32_t" [reduce using rule 246 (enum-name)] "char32_t" [reduce using rule 731 (typedef-name)] "wchar_t" reduce using rule 137 (class-name) "wchar_t" [reduce using rule 246 (enum-name)] "wchar_t" [reduce using rule 731 (typedef-name)] "bool" reduce using rule 137 (class-name) "bool" [reduce using rule 246 (enum-name)] "bool" [reduce using rule 731 (typedef-name)] "short" reduce using rule 137 (class-name) "short" [reduce using rule 246 (enum-name)] "short" [reduce using rule 731 (typedef-name)] "int" reduce using rule 137 (class-name) "int" [reduce using rule 246 (enum-name)] "int" [reduce using rule 731 (typedef-name)] "long" reduce using rule 137 (class-name) "long" [reduce using rule 246 (enum-name)] "long" [reduce using rule 731 (typedef-name)] "signed" reduce using rule 137 (class-name) "signed" [reduce using rule 246 (enum-name)] "signed" [reduce using rule 731 (typedef-name)] "unsigned" reduce using rule 137 (class-name) "unsigned" [reduce using rule 246 (enum-name)] "unsigned" [reduce using rule 731 (typedef-name)] "float" reduce using rule 137 (class-name) "float" [reduce using rule 246 (enum-name)] "float" [reduce using rule 731 (typedef-name)] "double" reduce using rule 137 (class-name) "double" [reduce using rule 246 (enum-name)] "double" [reduce using rule 731 (typedef-name)] "void" reduce using rule 137 (class-name) "void" [reduce using rule 246 (enum-name)] "void" [reduce using rule 731 (typedef-name)] "static_assert" reduce using rule 137 (class-name) "static_assert" [reduce using rule 246 (enum-name)] "static_assert" [reduce using rule 731 (typedef-name)] "static" reduce using rule 137 (class-name) "static" [reduce using rule 246 (enum-name)] "static" [reduce using rule 731 (typedef-name)] "thread_local" reduce using rule 137 (class-name) "thread_local" [reduce using rule 246 (enum-name)] "thread_local" [reduce using rule 731 (typedef-name)] "mutable" reduce using rule 137 (class-name) "mutable" [reduce using rule 246 (enum-name)] "mutable" [reduce using rule 731 (typedef-name)] "override" reduce using rule 137 (class-name) "override" [reduce using rule 246 (enum-name)] "override" [reduce using rule 731 (typedef-name)] $default reduce using rule 137 (class-name)
760 unqualified-id → "~" decltype-specifier • $default reduce using rule 760 (unqualified-id)
759 unqualified-id → "~" type-name • $default reduce using rule 759 (unqualified-id)
738 unary-expression → "++" cast-expression • $default reduce using rule 738 (unary-expression)
739 unary-expression → "--" cast-expression • $default reduce using rule 739 (unary-expression)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 570 postfix-expression → "dynamic_cast" "<" • type-id ">" "(" expression ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 765 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 571 postfix-expression → "static_cast" "<" • type-id ">" "(" expression ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 766 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 572 postfix-expression → "reinterpret_cast" "<" • type-id ">" "(" expression ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 767 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 573 postfix-expression → "const_cast" "<" • type-id ">" "(" expression ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 768 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 574 | "typeid" "(" • expression ")" 575 | • "typeid" "(" type-id ")" 575 | "typeid" "(" • type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 769 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 770 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
55 assignment-expression-opt → assignment-expression • $default reduce using rule 55 (assignment-expression-opt)
701 throw-expression → "throw" assignment-expression-opt • $default reduce using rule 701 (throw-expression)
743 unary-expression → "sizeof" "..." • "(" IDENTIFIER ")" "(" shift, and go to state 771
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 285 | "(" • cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" • "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 579 | "(" • expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 742 | "sizeof" "(" • type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "..." shift, and go to state 438 IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 439 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 440 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 772 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
741 unary-expression → "sizeof" unary-expression • $default reduce using rule 741 (unary-expression)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 744 unary-expression → "alignof" "(" • type-id ")" IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 773 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
775 yield-expression → "co_yield" assignment-expression • $default reduce using rule 775 (yield-expression)
776 yield-expression → "co_yield" braced-init-list • $default reduce using rule 776 (yield-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 222 | SCOPE-opt "delete" • cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 223 | SCOPE-opt "delete" • "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 774 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 775 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
466 new-expression → SCOPE-opt "new" • new-placement-opt new-type-id new-initializer-opt 467 | SCOPE-opt "new" • new-placement-opt "(" type-id ")" new-initializer-opt 472 new-placement → • "(" expression-list ")" 473 new-placement-opt → • %empty [IDENTIFIER, "::", "typename", "(", "class", "struct", "union", "const", "volatile", "decltype", "enum", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void"] 474 | • new-placement "(" shift, and go to state 776 "(" [reduce using rule 473 (new-placement-opt)] $default reduce using rule 473 (new-placement-opt) new-placement go to state 777 new-placement-opt go to state 778
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 42 additive-expression → additive-expression "+" • multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 779 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 43 additive-expression → additive-expression "-" • multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 780 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 48 and-expression → and-expression "&" • equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 781 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 147 compare-expression → compare-expression "<=>" • shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 shift-expression go to state 782 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 257 equality-expression → equality-expression "==" • relational-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 783 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 258 equality-expression → equality-expression "!=" • relational-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 784 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 263 exclusive-or-expression → exclusive-or-expression "^" • and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 785 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 278 expression → expression "," • assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 786 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
214 decltype-specifier → "decltype" "(" expression ")" • $default reduce using rule 214 (decltype-specifier)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 345 inclusive-or-expression → inclusive-or-expression "|" • exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 787 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 385 lambda-declarator → "(" • parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list "..." reduce using rule 551 (parameter-declaration-list-opt) ")" reduce using rule 551 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 parameter-declaration go to state 618 parameter-declaration-clause go to state 788 parameter-declaration-list go to state 620 parameter-declaration-list-opt go to state 621
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 387 lambda-expression → lambda-introducer "<" • template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 697 template-parameter → • type-parameter 698 | • parameter-declaration 699 template-parameter-list → • template-parameter 700 | • template-parameter-list "," template-parameter 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 716 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | • type-parameter-key IDENTIFIER-opt "=" type-id 718 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | • type-constraint IDENTIFIER-opt "=" type-id 720 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 215 "typename" shift, and go to state 216 "class" shift, and go to state 217 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 220 parameter-declaration go to state 221 simple-template-id go to state 96 template-head go to state 222 template-name go to state 102 template-parameter go to state 223 template-parameter-list go to state 789 type-constraint go to state 225 type-name go to state 106 type-parameter go to state 226 type-parameter-key go to state 227 typedef-name go to state 108
192 decl-specifier-seq-opt → decl-specifier-seq • $default reduce using rule 192 (decl-specifier-seq-opt)
389 lambda-specifiers → decl-specifier-seq-opt • noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 478 noexcept-specifier → • "noexcept" "(" constant-expression ")" 479 | • "noexcept" 480 noexcept-specifier-opt → • %empty ["alignas", "[", "{", "->", "requires"] 481 | • noexcept-specifier "noexcept" shift, and go to state 790 $default reduce using rule 480 (noexcept-specifier-opt) noexcept-specifier go to state 791 noexcept-specifier-opt go to state 792
149 compound-statement → • "{" statement-seq-opt "}" 386 lambda-expression → lambda-introducer lambda-declarator • compound-statement "{" shift, and go to state 793 compound-statement go to state 794
384 lambda-declarator → lambda-specifiers • $default reduce using rule 384 (lambda-declarator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 695 | literal-operator-id "<" • template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 406 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 407 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-argument go to state 409 template-argument-list go to state 410 template-argument-list-opt go to state 795 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 412 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 395 logical-and-expression → logical-and-expression "&&" • inclusive-or-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 796 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
56 assignment-operator → "=" • $default reduce using rule 56 (assignment-operator)
57 assignment-operator → "*=" • $default reduce using rule 57 (assignment-operator)
58 assignment-operator → "/=" • $default reduce using rule 58 (assignment-operator)
59 assignment-operator → "%=" • $default reduce using rule 59 (assignment-operator)
60 assignment-operator → "+=" • $default reduce using rule 60 (assignment-operator)
61 assignment-operator → "-=" • $default reduce using rule 61 (assignment-operator)
62 assignment-operator → ">>=" • $default reduce using rule 62 (assignment-operator)
63 assignment-operator → "<<=" • $default reduce using rule 63 (assignment-operator)
64 assignment-operator → "&=" • $default reduce using rule 64 (assignment-operator)
65 assignment-operator → "^=" • $default reduce using rule 65 (assignment-operator)
66 assignment-operator → "|=" • $default reduce using rule 66 (assignment-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 157 | logical-or-expression "?" • expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 797 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 397 logical-or-expression → logical-or-expression "||" • logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 798 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 53 | logical-or-expression assignment-operator • initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 799 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 440 multiplicative-expression → multiplicative-expression "*" • pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 800 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 441 multiplicative-expression → multiplicative-expression "/" • pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 801 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 442 multiplicative-expression → multiplicative-expression "%" • pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 802 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
169 conversion-function-id → • "operator" conversion-type-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 457 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 600 qualified-id → nested-name-specifier TEMPLATE-opt • unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 803 "operator" shift, and go to state 248 "~" shift, and go to state 335 conversion-function-id go to state 272 literal-operator-id go to state 282 operator-function-id go to state 289 simple-template-id go to state 804 template-id go to state 300 template-name go to state 102 unqualified-id go to state 805
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 694 | operator-function-id "<" • template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 406 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 407 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-argument go to state 409 template-argument-list go to state 410 template-argument-list-opt go to state 806 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 412 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 557 pm-expression → pm-expression ".*" • cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 807 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 558 pm-expression → pm-expression "->*" • cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 808 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 561 | postfix-expression "(" • expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression-list go to state 809 expression-list-opt go to state 810 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 646 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty ["]"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 560 | postfix-expression "[" • expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression-list go to state 809 expression-list-opt go to state 811 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 646 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
21 TEMPLATE-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 22 | • "template" 567 postfix-expression → postfix-expression "->" • TEMPLATE-opt id-expression "template" shift, and go to state 229 $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 812
21 TEMPLATE-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 22 | • "template" 566 postfix-expression → postfix-expression "." • TEMPLATE-opt id-expression "template" shift, and go to state 229 $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 813
568 postfix-expression → postfix-expression "++" • $default reduce using rule 568 (postfix-expression)
569 postfix-expression → postfix-expression "--" • $default reduce using rule 569 (postfix-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 607 relational-expression → relational-expression "<" • compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 814 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 608 relational-expression → relational-expression ">" • compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 815 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 609 relational-expression → relational-expression "<=" • compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 816 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 610 relational-expression → relational-expression ">=" • compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 817 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 634 shift-expression → shift-expression "<<" • additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 818 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 635 shift-expression → shift-expression ">>" • additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 819 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 562 | simple-type-specifier "(" • expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression-list go to state 809 expression-list-opt go to state 820 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 646 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
564 postfix-expression → simple-type-specifier braced-init-list • $default reduce using rule 564 (postfix-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 563 | typename-specifier "(" • expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression-list go to state 809 expression-list-opt go to state 821 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 646 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
565 postfix-expression → typename-specifier braced-init-list • $default reduce using rule 565 (postfix-expression)
737 unary-expression → unary-operator cast-expression • $default reduce using rule 737 (unary-expression)
266 explicit-specifier → "explicit" "(" constant-expression ")" • $default reduce using rule 266 (explicit-specifier)
436 module-partition → ":" module-name-qualifier-opt IDENTIFIER • $default reduce using rule 436 (module-partition)
430 module-import-declaration → "import" header-name attribute-specifier-seq-opt ";" • $default reduce using rule 430 (module-import-declaration)
428 module-import-declaration → "import" module-name attribute-specifier-seq-opt ";" • $default reduce using rule 428 (module-import-declaration)
433 module-name-qualifier → module-name-qualifier IDENTIFIER "." • $default reduce using rule 433 (module-name-qualifier)
429 module-import-declaration → "import" module-partition attribute-specifier-seq-opt ";" • $default reduce using rule 429 (module-import-declaration)
444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 601 qualified-namespace-specifier → nested-name-specifier-opt • namespace-name IDENTIFIER shift, and go to state 822 namespace-alias go to state 85 namespace-name go to state 823
445 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier • ";" ";" shift, and go to state 824
14 INLINE-opt → "inline" • $default reduce using rule 14 (INLINE-opt)
235 enclosing-namespace-specifier → enclosing-namespace-specifier "::" INLINE-opt • IDENTIFIER 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt • IDENTIFIER "{" namespace-body "}" IDENTIFIER shift, and go to state 825
677 static_assert-declaration → "static_assert" "(" constant-expression "," • string-literal ")" ";" 682 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 117 string-literal go to state 826
676 static_assert-declaration → "static_assert" "(" constant-expression ")" • ";" ";" shift, and go to state 827
443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER • "{" namespace-body "}" "{" shift, and go to state 828
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 446 namespace-body → • declaration-seq-opt 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 754 | INLINE-opt "namespace" attribute-specifier-seq-opt "{" • namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 829 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 830 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
641 simple-declaration → attribute-specifier-seq decl-specifier-seq init-declarator-list ";" • $default reduce using rule 641 (simple-declaration)
242 enum-head-name-opt → enum-head-name • $default reduce using rule 242 (enum-head-name-opt)
444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 767 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt • namespace-name ";" IDENTIFIER shift, and go to state 822 namespace-alias go to state 85 namespace-name go to state 831
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 46 alignment-specifier → "alignas" "(" constant-expression • ELLIPSIS-opt ")" "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 832
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 45 alignment-specifier → "alignas" "(" type-id • ELLIPSIS-opt ")" "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 833
491 noptr-declarator → noptr-declarator parameters-and-qualifiers • $default reduce using rule 491 (noptr-declarator)
493 noptr-declarator → "(" ptr-declarator ")" • $default reduce using rule 493 (noptr-declarator)
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal • ")" ";" ")" shift, and go to state 834
76 attribute-namespace → • IDENTIFIER 87 attribute-using-prefix → "using" • attribute-namespace ":" IDENTIFIER shift, and go to state 835 attribute-namespace go to state 836
89 attribute-using-prefix-opt → attribute-using-prefix • $default reduce using rule 89 (attribute-using-prefix-opt)
67 attribute → • attribute-token attribute-argument-clause-opt 72 attribute-list → • attribute-opt 73 | • attribute-list "," attribute-opt 74 | • attribute "..." 75 | • attribute-list "," attribute "..." 76 attribute-namespace → • IDENTIFIER 77 attribute-opt → • %empty [",", "]"] 78 | • attribute 79 attribute-scoped-token → • attribute-namespace "::" IDENTIFIER 80 attribute-specifier → "[" "[" attribute-using-prefix-opt • attribute-list "]" "]" 85 attribute-token → • IDENTIFIER 86 | • attribute-scoped-token IDENTIFIER shift, and go to state 837 $default reduce using rule 77 (attribute-opt) attribute go to state 838 attribute-list go to state 839 attribute-namespace go to state 840 attribute-opt go to state 841 attribute-scoped-token go to state 842 attribute-token go to state 843
175 cv-qualifier → • "const" 176 | • "volatile" 177 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 177 | cv-qualifier • cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 179 | • cv-qualifier-seq "const" shift, and go to state 15 "volatile" shift, and go to state 16 "const" [reduce using rule 178 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 178 (cv-qualifier-seq-opt)] $default reduce using rule 178 (cv-qualifier-seq-opt) cv-qualifier go to state 607 cv-qualifier-seq go to state 608 cv-qualifier-seq-opt go to state 844
179 cv-qualifier-seq-opt → cv-qualifier-seq • $default reduce using rule 179 (cv-qualifier-seq-opt)
593 ptr-operator → "*" attribute-specifier-seq-opt cv-qualifier-seq-opt • $default reduce using rule 593 (ptr-operator)
342 identifier-list → • IDENTIFIER 343 | • identifier-list "," IDENTIFIER 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" • identifier-list "]" initializer ";" IDENTIFIER shift, and go to state 845 identifier-list go to state 846
770 virt-specifier → "final" • $default reduce using rule 770 (virt-specifier)
769 virt-specifier → "override" • $default reduce using rule 769 (virt-specifier)
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 323 function-body → • ctor-initializer-opt compound-statement 324 | • function-try-block 325 | • "=" "default" ";" 326 | • "=" "delete" ";" 328 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause • function-body 331 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq "=" shift, and go to state 847 ":" shift, and go to state 848 "try" shift, and go to state 849 $default reduce using rule 173 (ctor-initializer-opt) ctor-initializer go to state 850 ctor-initializer-opt go to state 851 function-body go to state 852 function-try-block go to state 853
771 virt-specifier-seq → virt-specifier • $default reduce using rule 771 (virt-specifier-seq)
769 virt-specifier → • "override" 770 | • "final" 772 virt-specifier-seq → virt-specifier-seq • virt-specifier 774 virt-specifier-seq-opt → virt-specifier-seq • [",", "=", ";", ":", "{", "try"] "final" shift, and go to state 611 "override" shift, and go to state 612 $default reduce using rule 774 (virt-specifier-seq-opt) virt-specifier go to state 854
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 323 function-body → • ctor-initializer-opt compound-statement 324 | • function-try-block 325 | • "=" "default" ";" 326 | • "=" "delete" ";" 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt • function-body 331 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq "=" shift, and go to state 847 ":" shift, and go to state 848 "try" shift, and go to state 849 $default reduce using rule 173 (ctor-initializer-opt) ctor-initializer go to state 850 ctor-initializer-opt go to state 851 function-body go to state 855 function-try-block go to state 853
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 175 cv-qualifier → • "const" 176 | • "volatile" 177 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 179 | • cv-qualifier-seq 596 ptr-operator → nested-name-specifier "*" attribute-specifier-seq-opt • cv-qualifier-seq-opt "alignas" shift, and go to state 157 "[" shift, and go to state 161 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "alignas" [reduce using rule 178 (cv-qualifier-seq-opt)] "[" [reduce using rule 178 (cv-qualifier-seq-opt)] "const" [reduce using rule 178 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 178 (cv-qualifier-seq-opt)] $default reduce using rule 178 (cv-qualifier-seq-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 cv-qualifier go to state 607 cv-qualifier-seq go to state 608 cv-qualifier-seq-opt go to state 856
549 parameter-declaration-list → parameter-declaration • $default reduce using rule 549 (parameter-declaration-list)
553 parameters-and-qualifiers → "(" parameter-declaration-clause • ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt ")" shift, and go to state 857
548 parameter-declaration-clause → parameter-declaration-list • "," "..." 550 parameter-declaration-list → parameter-declaration-list • "," parameter-declaration 552 parameter-declaration-list-opt → parameter-declaration-list • ["...", ")"] "," shift, and go to state 858 $default reduce using rule 552 (parameter-declaration-list-opt)
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 547 parameter-declaration-clause → parameter-declaration-list-opt • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 859
160 constant-expression-opt → constant-expression • $default reduce using rule 160 (constant-expression-opt)
492 noptr-declarator → noptr-declarator "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 860
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 702 trailing-return-type → "->" • type-id 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 861 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
212 declarator → noptr-declarator parameters-and-qualifiers trailing-return-type • $default reduce using rule 212 (declarator)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 233 empty-declaration → • ";" 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 404 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 405 | • function-definition 406 | • using-declaration 407 | • using-enum-declaration 408 | • static_assert-declaration 409 | • template-declaration 410 | • explicit-specialization 411 | • deduction-guide 412 | • alias-declaration 413 | • opaque-enum-declaration 414 | • empty-declaration 423 member-specification → • member-declaration member-specification-opt 424 | • access-specifier ":" member-specification-opt 424 | access-specifier ":" • member-specification-opt 425 member-specification-opt → • %empty ["}"] 426 | • member-specification 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 763 using-declaration → • "using" using-declarator-list ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 350 "protected" shift, and go to state 351 "public" shift, and go to state 352 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 353 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 425 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 354 alias-declaration go to state 355 attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 356 deduction-guide go to state 357 empty-declaration go to state 358 enum-key go to state 359 explicit-specialization go to state 360 explicit-specifier go to state 361 explicit-specifier-opt go to state 76 function-definition go to state 362 member-declaration go to state 363 member-specification go to state 364 member-specification-opt go to state 862 opaque-enum-declaration go to state 366 static_assert-declaration go to state 367 template-declaration go to state 368 template-head go to state 101 using-declaration go to state 369 using-enum-declaration go to state 370
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["alignas", "[", ":"] 12 | • IDENTIFIER 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt • declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt • declarator requires-clause function-body 404 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt • member-declarator-list-opt ";" 415 member-declarator → • declarator virt-specifier-seq-opt pure-specifier-opt 416 | • declarator requires-clause 417 | • declarator brace-or-equal-initializer-opt 418 | • IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 419 member-declarator-list → • member-declarator 420 | • member-declarator-list "," member-declarator 421 member-declarator-list-opt → • %empty [";"] 422 | • member-declarator-list 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 863 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] ";" reduce using rule 421 (member-declarator-list-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 11 (IDENTIFIER-opt) ELLIPSIS-opt go to state 164 IDENTIFIER-opt go to state 864 class-name go to state 55 declarator go to state 865 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 member-declarator go to state 866 member-declarator-list go to state 867 member-declarator-list-opt go to state 868 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 172 ptr-declarator go to state 173 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 240 enum-head-name → • nested-name-specifier-opt IDENTIFIER 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt • enum-head-name enum-base-opt ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] alignment-specifier go to state 165 attribute-specifier go to state 166 class-name go to state 55 decltype-specifier go to state 120 enum-head-name go to state 869 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 395 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
423 member-specification → member-declaration member-specification-opt • $default reduce using rule 423 (member-specification)
142 class-specifier → class-head "{" member-specification-opt "}" • $default reduce using rule 142 (class-specifier)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 102 base-specifier → attribute-specifier-seq-opt • class-or-decltype 103 | attribute-specifier-seq-opt • "virtual" access-specifier-opt class-or-decltype 104 | attribute-specifier-seq-opt • access-specifier VIRTUAL-opt class-or-decltype 137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "virtual" shift, and go to state 870 "private" shift, and go to state 350 "protected" shift, and go to state 351 "public" shift, and go to state 352 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] access-specifier go to state 871 alignment-specifier go to state 165 attribute-specifier go to state 166 class-name go to state 55 class-or-decltype go to state 872 decltype-specifier go to state 873 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 874 nested-name-specifier-opt go to state 875 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 105 base-specifier-list → base-specifier • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 876
99 base-clause → ":" base-specifier-list • ["{"] 106 base-specifier-list → base-specifier-list • "," base-specifier ELLIPSIS-opt "," shift, and go to state 877 $default reduce using rule 99 (base-clause)
143 class-virt-specifier → "final" • $default reduce using rule 143 (class-virt-specifier)
145 class-virt-specifier-opt → class-virt-specifier • $default reduce using rule 145 (class-virt-specifier-opt)
99 base-clause → • ":" base-specifier-list 100 base-clause-opt → • %empty ["{"] 101 | • base-clause 131 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt • base-clause-opt ":" shift, and go to state 371 $default reduce using rule 100 (base-clause-opt) base-clause go to state 372 base-clause-opt go to state 878
137 class-name → IDENTIFIER • [":", "{", "final"] 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", ">", "explicit", "*", "requires", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 696 template-name → IDENTIFIER • ["<"] ":" reduce using rule 137 (class-name) ":" [reduce using rule 229 (elaborated-type-specifier)] "{" reduce using rule 137 (class-name) "{" [reduce using rule 229 (elaborated-type-specifier)] "final" reduce using rule 137 (class-name) "<" reduce using rule 696 (template-name) $default reduce using rule 229 (elaborated-type-specifier)
133 class-head-name → nested-name-specifier-opt class-name • $default reduce using rule 133 (class-head-name)
138 class-name → simple-template-id • $default reduce using rule 138 (class-name)
231 elaborated-type-specifier → class-key nested-name-specifier TEMPLATE-opt simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" "::" shift, and go to state 672 "::" [reduce using rule 231 (elaborated-type-specifier)] $default reduce using rule 231 (elaborated-type-specifier)
361 initializer-clause → assignment-expression • $default reduce using rule 361 (initializer-clause)
362 initializer-clause → braced-init-list • $default reduce using rule 362 (initializer-clause)
116 brace-or-equal-initializer → "=" initializer-clause • $default reduce using rule 116 (brace-or-equal-initializer)
360 initializer → "(" expression-list • ")" ")" shift, and go to state 879
5 ELLIPSIS-opt → • %empty [",", ")", "]", "}"] 6 | • "..." 363 initializer-list → initializer-clause • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 880
279 expression-list → initializer-list • [")", "]"] 364 initializer-list → initializer-list • "," initializer-clause ELLIPSIS-opt "," shift, and go to state 881 $default reduce using rule 279 (expression-list)
122 braced-init-list → "{" "}" • $default reduce using rule 122 (braced-init-list)
227 designator → "." • IDENTIFIER IDENTIFIER shift, and go to state 882
225 designated-initializer-list → designated-initializer-clause • $default reduce using rule 225 (designated-initializer-list)
1 COMMA-opt → • %empty ["}"] 2 | • "," 121 braced-init-list → "{" designated-initializer-list • COMMA-opt "}" 226 designated-initializer-list → designated-initializer-list • "," designated-initializer-clause "," shift, and go to state 883 $default reduce using rule 1 (COMMA-opt) COMMA-opt go to state 884
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 224 designated-initializer-clause → designator • brace-or-equal-initializer "=" shift, and go to state 377 "{" shift, and go to state 379 brace-or-equal-initializer go to state 885 braced-init-list go to state 382
1 COMMA-opt → • %empty ["}"] 2 | • "," 120 braced-init-list → "{" initializer-list • COMMA-opt "}" 364 initializer-list → initializer-list • "," initializer-clause ELLIPSIS-opt "," shift, and go to state 886 $default reduce using rule 1 (COMMA-opt) COMMA-opt go to state 887
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 285 | "(" • cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" • "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 579 | "(" • expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "..." shift, and go to state 438 IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 439 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 440 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
163 constraint-logical-and-expression → constraint-logical-and-expression • "&&" primary-expression 164 constraint-logical-or-expression → constraint-logical-and-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "&&" shift, and go to state 888 "&&" [reduce using rule 164 (constraint-logical-or-expression)] $default reduce using rule 164 (constraint-logical-or-expression)
165 constraint-logical-or-expression → constraint-logical-or-expression • "||" constraint-logical-and-expression 621 requires-clause → "requires" constraint-logical-or-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "||" shift, and go to state 889 $default reduce using rule 621 (requires-clause)
162 constraint-logical-and-expression → primary-expression • $default reduce using rule 162 (constraint-logical-and-expression)
351 init-declarator-list → init-declarator-list "," init-declarator • $default reduce using rule 351 (init-declarator-list)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 249 enumerator → IDENTIFIER attribute-specifier-seq-opt • [",", "=", "}"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 $default reduce using rule 249 (enumerator) alignment-specifier go to state 165 attribute-specifier go to state 166
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 251 enumerator-definition → enumerator "=" • constant-expression 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 890 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
248 enum-specifier → enum-head "{" enumerator-list "," • "}" 249 enumerator → • IDENTIFIER attribute-specifier-seq-opt 250 enumerator-definition → • enumerator 251 | • enumerator "=" constant-expression 253 enumerator-list → enumerator-list "," • enumerator-definition IDENTIFIER shift, and go to state 388 "}" shift, and go to state 891 enumerator go to state 389 enumerator-definition go to state 892
247 enum-specifier → enum-head "{" enumerator-list-opt "}" • $default reduce using rule 247 (enum-specifier)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 236 enum-base → ":" • type-specifier-seq 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 893 typedef-name go to state 108 typename-specifier go to state 109
238 enum-base-opt → enum-base • $default reduce using rule 238 (enum-base-opt)
496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt • ";" ";" shift, and go to state 894
239 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt • $default reduce using rule 239 (enum-head)
240 enum-head-name → nested-name-specifier-opt IDENTIFIER • $default reduce using rule 240 (enum-head-name)
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause • ")" "->" simple-template-id ";" ")" shift, and go to state 895
427 module-declaration → EXPORT-opt "module" module-name • module-partition-opt attribute-specifier-seq-opt ";" 436 module-partition → • ":" module-name-qualifier-opt IDENTIFIER 437 module-partition-opt → • %empty [";", "alignas", "["] 438 | • module-partition ":" shift, and go to state 137 $default reduce using rule 437 (module-partition-opt) module-partition go to state 896 module-partition-opt go to state 897
584 private-module-fragment → "module" • ":" "private" ";" declaration-seq-opt ":" shift, and go to state 898
586 private-module-fragment-opt → private-module-fragment • $default reduce using rule 586 (private-module-fragment-opt)
706 translation-unit → global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt • $default reduce using rule 706 (translation-unit)
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id "::" • $default reduce using rule 457 (nested-name-specifier)
709 type-constraint → nested-name-specifier-opt concept-name "<" template-argument-list-opt • ">" ">" shift, and go to state 899
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 150 concept-definition → "concept" concept-name "=" • constraint-expression ";" 161 constraint-expression → • logical-or-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 constraint-expression go to state 900 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 901 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt • nested-name-specifier-opt IDENTIFIER 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] alignment-specifier go to state 165 attribute-specifier go to state 166 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 902 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
686 template-argument-list → template-argument ELLIPSIS-opt • $default reduce using rule 686 (template-argument-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 687 template-argument-list → template-argument-list "," • template-argument ELLIPSIS-opt 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 406 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 407 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-argument go to state 903 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 412 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
644 simple-template-id → template-name "<" template-argument-list-opt ">" • $default reduce using rule 644 (simple-template-id)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 729 type-specifier-seq → type-specifier attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "alignas" [reduce using rule 729 (type-specifier-seq)] "[" [reduce using rule 729 (type-specifier-seq)] $default reduce using rule 729 (type-specifier-seq) alignment-specifier go to state 165 attribute-specifier go to state 166
730 type-specifier-seq → type-specifier type-specifier-seq • $default reduce using rule 730 (type-specifier-seq)
489 noptr-abstract-pack-declarator → "..." • $default reduce using rule 489 (noptr-abstract-pack-declarator)
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 484 | "(" • ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 682 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] $default reduce using rule 485 (noptr-abstract-declarator-opt) class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 904 ptr-abstract-declarator go to state 905 ptr-operator go to state 906 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
33 abstract-declarator-opt → abstract-declarator • $default reduce using rule 33 (abstract-declarator-opt)
712 type-id → type-specifier-seq abstract-declarator-opt • $default reduce using rule 712 (type-id)
31 abstract-declarator → abstract-pack-declarator • $default reduce using rule 31 (abstract-declarator)
486 noptr-abstract-declarator-opt → noptr-abstract-declarator • ["(", "["] 587 ptr-abstract-declarator → noptr-abstract-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" reduce using rule 486 (noptr-abstract-declarator-opt) "(" [reduce using rule 587 (ptr-abstract-declarator)] "[" reduce using rule 486 (noptr-abstract-declarator-opt) $default reduce using rule 587 (ptr-abstract-declarator)
30 abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers trailing-return-type 482 noptr-abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers 483 | noptr-abstract-declarator-opt • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 346 "[" shift, and go to state 907 parameters-and-qualifiers go to state 908
34 abstract-pack-declarator → noptr-abstract-pack-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 487 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator • parameters-and-qualifiers 488 | noptr-abstract-pack-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 346 "[" shift, and go to state 909 "(" [reduce using rule 34 (abstract-pack-declarator)] $default reduce using rule 34 (abstract-pack-declarator) parameters-and-qualifiers go to state 910
29 abstract-declarator → ptr-abstract-declarator • $default reduce using rule 29 (abstract-declarator)
34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 35 | ptr-operator • abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 588 | ptr-operator • ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → • %empty [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 590 | • ptr-abstract-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 681 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 682 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "..." [reduce using rule 589 (ptr-abstract-declarator-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "(" [reduce using rule 589 (ptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) $default reduce using rule 589 (ptr-abstract-declarator-opt) abstract-pack-declarator go to state 911 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 904 noptr-abstract-pack-declarator go to state 688 ptr-abstract-declarator go to state 912 ptr-abstract-declarator-opt go to state 913 ptr-operator go to state 690 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
555 placeholder-type-specifier → type-constraint-opt "decltype" "(" "auto" • ")" ")" shift, and go to state 914
390 linkage-specification → "extern" string-literal "{" declaration-seq-opt "}" • $default reduce using rule 390 (linkage-specification)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [",", "...", "=", ")", ">"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 543 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq • declarator 544 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • declarator "=" initializer-clause 545 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • abstract-declarator-opt 546 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • abstract-declarator-opt "=" initializer-clause 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 915 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 916 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "..." [reduce using rule 32 (abstract-declarator-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 32 (abstract-declarator-opt) ELLIPSIS-opt go to state 164 abstract-declarator go to state 683 abstract-declarator-opt go to state 917 abstract-pack-declarator go to state 685 class-name go to state 55 declarator go to state 918 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 687 noptr-abstract-pack-declarator go to state 688 noptr-declarator go to state 172 ptr-abstract-declarator go to state 689 ptr-declarator go to state 173 ptr-operator go to state 919 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 720 type-parameter → template-head type-parameter-key ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 426 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 920
721 type-parameter → template-head type-parameter-key IDENTIFIER-opt • "=" id-expression "=" shift, and go to state 921
700 template-parameter-list → template-parameter-list "," template-parameter • $default reduce using rule 700 (template-parameter-list)
623 requires-clause-opt → requires-clause • $default reduce using rule 623 (requires-clause-opt)
692 template-head → "template" "<" template-parameter-list ">" requires-clause-opt • $default reduce using rule 692 (template-head)
718 type-parameter → type-constraint ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 718 (type-parameter)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 719 type-parameter → type-constraint IDENTIFIER-opt "=" • type-id 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 922 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
716 type-parameter → type-parameter-key ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 716 (type-parameter)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 717 type-parameter → type-parameter-key IDENTIFIER-opt "=" • type-id 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 923 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id • ";" ";" shift, and go to state 924
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", ";", "alignas", "(", "&", "[", "&&", "decltype", "*"] 84 | • attribute-specifier-seq 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 220 defining-type-specifier-seq → • defining-type-specifier attribute-specifier-seq-opt 220 | defining-type-specifier • attribute-specifier-seq-opt 221 | • defining-type-specifier defining-type-specifier-seq 221 | defining-type-specifier • defining-type-specifier-seq 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 925 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decltype-specifier go to state 63 defining-type-specifier go to state 704 defining-type-specifier-seq go to state 926 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [";"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 216 defining-type-id → defining-type-specifier-seq • abstract-declarator-opt 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 681 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 682 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) $default reduce using rule 32 (abstract-declarator-opt) abstract-declarator go to state 683 abstract-declarator-opt go to state 927 abstract-pack-declarator go to state 685 class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 687 noptr-abstract-pack-declarator go to state 688 ptr-abstract-declarator go to state 689 ptr-operator go to state 690 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
766 using-declarator-list → using-declarator-list "," using-declarator ELLIPSIS-opt • $default reduce using rule 766 (using-declarator-list)
278 expression → expression • "," assignment-expression 477 noexcept-expression → "noexcept" "(" expression • ")" "," shift, and go to state 533 ")" shift, and go to state 928
317 fold-operator → "," • $default reduce using rule 317 (fold-operator)
288 fold-operator → "+" • $default reduce using rule 288 (fold-operator)
289 fold-operator → "-" • $default reduce using rule 289 (fold-operator)
308 fold-operator → "=" • $default reduce using rule 308 (fold-operator)
294 fold-operator → "&" • $default reduce using rule 294 (fold-operator)
300 fold-operator → "*=" • $default reduce using rule 300 (fold-operator)
301 fold-operator → "/=" • $default reduce using rule 301 (fold-operator)
302 fold-operator → "%=" • $default reduce using rule 302 (fold-operator)
298 fold-operator → "+=" • $default reduce using rule 298 (fold-operator)
299 fold-operator → "-=" • $default reduce using rule 299 (fold-operator)
307 fold-operator → ">>=" • $default reduce using rule 307 (fold-operator)
306 fold-operator → "<<=" • $default reduce using rule 306 (fold-operator)
304 fold-operator → "&=" • $default reduce using rule 304 (fold-operator)
303 fold-operator → "^=" • $default reduce using rule 303 (fold-operator)
305 fold-operator → "|=" • $default reduce using rule 305 (fold-operator)
315 fold-operator → "&&" • $default reduce using rule 315 (fold-operator)
316 fold-operator → "||" • $default reduce using rule 316 (fold-operator)
309 fold-operator → "==" • $default reduce using rule 309 (fold-operator)
310 fold-operator → "!=" • $default reduce using rule 310 (fold-operator)
293 fold-operator → "^" • $default reduce using rule 293 (fold-operator)
311 fold-operator → "<" • $default reduce using rule 311 (fold-operator)
312 fold-operator → ">" • $default reduce using rule 312 (fold-operator)
290 fold-operator → "*" • $default reduce using rule 290 (fold-operator)
291 fold-operator → "/" • $default reduce using rule 291 (fold-operator)
292 fold-operator → "%" • $default reduce using rule 292 (fold-operator)
295 fold-operator → "|" • $default reduce using rule 295 (fold-operator)
296 fold-operator → "<<" • $default reduce using rule 296 (fold-operator)
297 fold-operator → ">>" • $default reduce using rule 297 (fold-operator)
313 fold-operator → "<=" • $default reduce using rule 313 (fold-operator)
314 fold-operator → ">=" • $default reduce using rule 314 (fold-operator)
318 fold-operator → ".*" • $default reduce using rule 318 (fold-operator)
319 fold-operator → "->*" • $default reduce using rule 319 (fold-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" "..." fold-operator • cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 929 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
285 fold-expression → "(" cast-expression fold-operator • "..." ")" 287 | "(" cast-expression fold-operator • "..." fold-operator cast-expression ")" "..." shift, and go to state 930
579 primary-expression → "(" expression ")" • $default reduce using rule 579 (primary-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 130 | "(" type-id ")" • cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 931 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
636 simple-capture → IDENTIFIER ELLIPSIS-opt • $default reduce using rule 636 (simple-capture)
5 ELLIPSIS-opt → • %empty [",", "]"] 6 | • "..." 637 simple-capture → "&" IDENTIFIER • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 932
347 init-capture → "&" ELLIPSIS-opt • IDENTIFIER initializer IDENTIFIER shift, and go to state 933
639 simple-capture → "*" "this" • $default reduce using rule 639 (simple-capture)
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 346 init-capture → ELLIPSIS-opt IDENTIFIER • initializer 359 initializer → • brace-or-equal-initializer 360 | • "(" expression-list ")" "=" shift, and go to state 377 "(" shift, and go to state 378 "{" shift, and go to state 379 brace-or-equal-initializer go to state 381 braced-init-list go to state 382 initializer go to state 934
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 123 capture → • simple-capture 124 | • init-capture 127 capture-list → • capture 128 | • capture-list "," capture 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 381 lambda-capture → capture-default "," • capture-list 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 155 IDENTIFIER shift, and go to state 442 "this" shift, and go to state 443 "&" shift, and go to state 935 "*" shift, and go to state 446 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 447 capture go to state 448 capture-list go to state 936 init-capture go to state 451 simple-capture go to state 454
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 123 capture → • simple-capture 124 | • init-capture 128 capture-list → capture-list "," • capture 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 155 IDENTIFIER shift, and go to state 442 "this" shift, and go to state 443 "&" shift, and go to state 935 "*" shift, and go to state 446 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 447 capture go to state 937 init-capture go to state 451 simple-capture go to state 454
388 lambda-introducer → "[" lambda-capture-opt "]" • $default reduce using rule 388 (lambda-introducer)
504 overloadable-operator → "(" ")" • $default reduce using rule 504 (overloadable-operator)
505 overloadable-operator → "[" "]" • $default reduce using rule 505 (overloadable-operator)
502 overloadable-operator → "delete" "[" • "]" "]" shift, and go to state 938
501 overloadable-operator → "new" "[" • "]" "]" shift, and go to state 939
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 498 | "operator" overloadable-operator "<" • template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 406 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 407 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-argument go to state 409 template-argument-list go to state 410 template-argument-list-opt go to state 940 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 412 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
392 literal-operator-id → "operator" string-literal IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 735 ud-suffix → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 392 (literal-operator-id) "," [reduce using rule 735 (ud-suffix)] "constexpr" reduce using rule 392 (literal-operator-id) "constexpr" [reduce using rule 735 (ud-suffix)] "..." reduce using rule 392 (literal-operator-id) "..." [reduce using rule 735 (ud-suffix)] "export" reduce using rule 392 (literal-operator-id) "export" [reduce using rule 735 (ud-suffix)] "extern" reduce using rule 392 (literal-operator-id) "extern" [reduce using rule 735 (ud-suffix)] IDENTIFIER reduce using rule 392 (literal-operator-id) IDENTIFIER [reduce using rule 735 (ud-suffix)] "inline" reduce using rule 392 (literal-operator-id) "inline" [reduce using rule 735 (ud-suffix)] "noexcept" reduce using rule 392 (literal-operator-id) "noexcept" [reduce using rule 735 (ud-suffix)] "::" reduce using rule 392 (literal-operator-id) "::" [reduce using rule 735 (ud-suffix)] "template" reduce using rule 392 (literal-operator-id) "template" [reduce using rule 735 (ud-suffix)] "typename" reduce using rule 392 (literal-operator-id) "typename" [reduce using rule 735 (ud-suffix)] "virtual" reduce using rule 392 (literal-operator-id) "virtual" [reduce using rule 735 (ud-suffix)] "+" reduce using rule 392 (literal-operator-id) "+" [reduce using rule 735 (ud-suffix)] "-" reduce using rule 392 (literal-operator-id) "-" [reduce using rule 735 (ud-suffix)] "using" reduce using rule 392 (literal-operator-id) "using" [reduce using rule 735 (ud-suffix)] "=" reduce using rule 392 (literal-operator-id) "=" [reduce using rule 735 (ud-suffix)] ";" reduce using rule 392 (literal-operator-id) ";" [reduce using rule 735 (ud-suffix)] "alignas" reduce using rule 392 (literal-operator-id) "alignas" [reduce using rule 735 (ud-suffix)] "(" reduce using rule 392 (literal-operator-id) "(" [reduce using rule 735 (ud-suffix)] ")" reduce using rule 392 (literal-operator-id) ")" [reduce using rule 735 (ud-suffix)] "&" reduce using rule 392 (literal-operator-id) "&" [reduce using rule 735 (ud-suffix)] "asm" reduce using rule 392 (literal-operator-id) "asm" [reduce using rule 735 (ud-suffix)] "*=" reduce using rule 392 (literal-operator-id) "*=" [reduce using rule 735 (ud-suffix)] "/=" reduce using rule 392 (literal-operator-id) "/=" [reduce using rule 735 (ud-suffix)] "%=" reduce using rule 392 (literal-operator-id) "%=" [reduce using rule 735 (ud-suffix)] "+=" reduce using rule 392 (literal-operator-id) "+=" [reduce using rule 735 (ud-suffix)] "-=" reduce using rule 392 (literal-operator-id) "-=" [reduce using rule 735 (ud-suffix)] ">>=" reduce using rule 392 (literal-operator-id) ">>=" [reduce using rule 735 (ud-suffix)] "<<=" reduce using rule 392 (literal-operator-id) "<<=" [reduce using rule 735 (ud-suffix)] "&=" reduce using rule 392 (literal-operator-id) "&=" [reduce using rule 735 (ud-suffix)] "^=" reduce using rule 392 (literal-operator-id) "^=" [reduce using rule 735 (ud-suffix)] "|=" reduce using rule 392 (literal-operator-id) "|=" [reduce using rule 735 (ud-suffix)] "[" reduce using rule 392 (literal-operator-id) "[" [reduce using rule 735 (ud-suffix)] "]" reduce using rule 392 (literal-operator-id) "]" [reduce using rule 735 (ud-suffix)] ":" reduce using rule 392 (literal-operator-id) ":" [reduce using rule 735 (ud-suffix)] "{" reduce using rule 392 (literal-operator-id) "{" [reduce using rule 735 (ud-suffix)] "}" reduce using rule 392 (literal-operator-id) "}" [reduce using rule 735 (ud-suffix)] "class" reduce using rule 392 (literal-operator-id) "class" [reduce using rule 735 (ud-suffix)] "struct" reduce using rule 392 (literal-operator-id) "struct" [reduce using rule 735 (ud-suffix)] "union" reduce using rule 392 (literal-operator-id) "union" [reduce using rule 735 (ud-suffix)] "final" reduce using rule 392 (literal-operator-id) "final" [reduce using rule 735 (ud-suffix)] "<=>" reduce using rule 392 (literal-operator-id) "<=>" [reduce using rule 735 (ud-suffix)] "concept" reduce using rule 392 (literal-operator-id) "concept" [reduce using rule 735 (ud-suffix)] "?" reduce using rule 392 (literal-operator-id) "?" [reduce using rule 735 (ud-suffix)] "&&" reduce using rule 392 (literal-operator-id) "&&" [reduce using rule 735 (ud-suffix)] "||" reduce using rule 392 (literal-operator-id) "||" [reduce using rule 735 (ud-suffix)] "operator" reduce using rule 392 (literal-operator-id) "operator" [reduce using rule 735 (ud-suffix)] "const" reduce using rule 392 (literal-operator-id) "const" [reduce using rule 735 (ud-suffix)] "volatile" reduce using rule 392 (literal-operator-id) "volatile" [reduce using rule 735 (ud-suffix)] "friend" reduce using rule 392 (literal-operator-id) "friend" [reduce using rule 735 (ud-suffix)] "typedef" reduce using rule 392 (literal-operator-id) "typedef" [reduce using rule 735 (ud-suffix)] "consteval" reduce using rule 392 (literal-operator-id) "consteval" [reduce using rule 735 (ud-suffix)] "constinit" reduce using rule 392 (literal-operator-id) "constinit" [reduce using rule 735 (ud-suffix)] "decltype" reduce using rule 392 (literal-operator-id) "decltype" [reduce using rule 735 (ud-suffix)] "->" reduce using rule 392 (literal-operator-id) "->" [reduce using rule 735 (ud-suffix)] "." reduce using rule 392 (literal-operator-id) "." [reduce using rule 735 (ud-suffix)] "enum" reduce using rule 392 (literal-operator-id) "enum" [reduce using rule 735 (ud-suffix)] "==" reduce using rule 392 (literal-operator-id) "==" [reduce using rule 735 (ud-suffix)] "!=" reduce using rule 392 (literal-operator-id) "!=" [reduce using rule 735 (ud-suffix)] "^" reduce using rule 392 (literal-operator-id) "^" [reduce using rule 735 (ud-suffix)] "<" reduce using rule 392 (literal-operator-id) "<" [reduce using rule 735 (ud-suffix)] ">" reduce using rule 392 (literal-operator-id) ">" [reduce using rule 735 (ud-suffix)] "explicit" reduce using rule 392 (literal-operator-id) "explicit" [reduce using rule 735 (ud-suffix)] "*" reduce using rule 392 (literal-operator-id) "*" [reduce using rule 735 (ud-suffix)] "/" reduce using rule 392 (literal-operator-id) "/" [reduce using rule 735 (ud-suffix)] "%" reduce using rule 392 (literal-operator-id) "%" [reduce using rule 735 (ud-suffix)] "|" reduce using rule 392 (literal-operator-id) "|" [reduce using rule 735 (ud-suffix)] "<<" reduce using rule 392 (literal-operator-id) "<<" [reduce using rule 735 (ud-suffix)] ">>" reduce using rule 392 (literal-operator-id) ">>" [reduce using rule 735 (ud-suffix)] "<=" reduce using rule 392 (literal-operator-id) "<=" [reduce using rule 735 (ud-suffix)] ">=" reduce using rule 392 (literal-operator-id) ">=" [reduce using rule 735 (ud-suffix)] ".*" reduce using rule 392 (literal-operator-id) ".*" [reduce using rule 735 (ud-suffix)] "->*" reduce using rule 392 (literal-operator-id) "->*" [reduce using rule 735 (ud-suffix)] "try" reduce using rule 392 (literal-operator-id) "try" [reduce using rule 735 (ud-suffix)] "import" reduce using rule 392 (literal-operator-id) "import" [reduce using rule 735 (ud-suffix)] "namespace" reduce using rule 392 (literal-operator-id) "namespace" [reduce using rule 735 (ud-suffix)] "requires" reduce using rule 392 (literal-operator-id) "requires" [reduce using rule 735 (ud-suffix)] "~" reduce using rule 392 (literal-operator-id) "~" [reduce using rule 735 (ud-suffix)] "++" reduce using rule 392 (literal-operator-id) "++" [reduce using rule 735 (ud-suffix)] "--" reduce using rule 392 (literal-operator-id) "--" [reduce using rule 735 (ud-suffix)] "auto" reduce using rule 392 (literal-operator-id) "auto" [reduce using rule 735 (ud-suffix)] "char" reduce using rule 392 (literal-operator-id) "char" [reduce using rule 735 (ud-suffix)] "char8_t" reduce using rule 392 (literal-operator-id) "char8_t" [reduce using rule 735 (ud-suffix)] "char16_t" reduce using rule 392 (literal-operator-id) "char16_t" [reduce using rule 735 (ud-suffix)] "char32_t" reduce using rule 392 (literal-operator-id) "char32_t" [reduce using rule 735 (ud-suffix)] "wchar_t" reduce using rule 392 (literal-operator-id) "wchar_t" [reduce using rule 735 (ud-suffix)] "bool" reduce using rule 392 (literal-operator-id) "bool" [reduce using rule 735 (ud-suffix)] "short" reduce using rule 392 (literal-operator-id) "short" [reduce using rule 735 (ud-suffix)] "int" reduce using rule 392 (literal-operator-id) "int" [reduce using rule 735 (ud-suffix)] "long" reduce using rule 392 (literal-operator-id) "long" [reduce using rule 735 (ud-suffix)] "signed" reduce using rule 392 (literal-operator-id) "signed" [reduce using rule 735 (ud-suffix)] "unsigned" reduce using rule 392 (literal-operator-id) "unsigned" [reduce using rule 735 (ud-suffix)] "float" reduce using rule 392 (literal-operator-id) "float" [reduce using rule 735 (ud-suffix)] "double" reduce using rule 392 (literal-operator-id) "double" [reduce using rule 735 (ud-suffix)] "void" reduce using rule 392 (literal-operator-id) "void" [reduce using rule 735 (ud-suffix)] "static_assert" reduce using rule 392 (literal-operator-id) "static_assert" [reduce using rule 735 (ud-suffix)] "static" reduce using rule 392 (literal-operator-id) "static" [reduce using rule 735 (ud-suffix)] "thread_local" reduce using rule 392 (literal-operator-id) "thread_local" [reduce using rule 735 (ud-suffix)] "mutable" reduce using rule 392 (literal-operator-id) "mutable" [reduce using rule 735 (ud-suffix)] "override" reduce using rule 392 (literal-operator-id) "override" [reduce using rule 735 (ud-suffix)] $default reduce using rule 392 (literal-operator-id)
762 user-defined-string-literal → string-literal ud-suffix • $default reduce using rule 762 (user-defined-string-literal)
168 conversion-declarator-opt → conversion-declarator • $default reduce using rule 168 (conversion-declarator-opt)
170 conversion-type-id → type-specifier-seq conversion-declarator-opt • $default reduce using rule 170 (conversion-type-id)
137 class-name → • IDENTIFIER 138 | • simple-template-id 166 conversion-declarator → • ptr-operator conversion-declarator-opt 166 | ptr-operator • conversion-declarator-opt 167 conversion-declarator-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 168 | • conversion-declarator 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 167 (conversion-declarator-opt)] "::" [reduce using rule 167 (conversion-declarator-opt)] "&" [reduce using rule 167 (conversion-declarator-opt)] "&&" [reduce using rule 167 (conversion-declarator-opt)] "decltype" [reduce using rule 167 (conversion-declarator-opt)] "*" [reduce using rule 167 (conversion-declarator-opt)] $default reduce using rule 167 (conversion-declarator-opt) class-name go to state 55 conversion-declarator go to state 759 conversion-declarator-opt go to state 941 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 ptr-operator go to state 761 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
616 requirement-parameter-list → "(" parameter-declaration-clause • ")" ")" shift, and go to state 942
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 148 compound-requirement → • "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 461 nested-requirement → • "requires" constraint-expression ";" 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 611 requirement → • simple-requirement 612 | • type-requirement 613 | • compound-requirement 614 | • nested-requirement 615 requirement-body → "{" • requirement-seq "}" 619 requirement-seq → • requirement 620 | • requirement-seq requirement 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 643 simple-requirement → • expression ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 724 type-requirement → • "typename" nested-name-specifier-opt type-name ";" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 943 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 944 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 945 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 compound-requirement go to state 946 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 947 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 nested-requirement go to state 948 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requirement go to state 949 requirement-seq go to state 950 requires-expression go to state 295 shift-expression go to state 296 simple-requirement go to state 951 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-requirement go to state 952 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
624 requires-expression → "requires" requirement-parameter-list-opt requirement-body • $default reduce using rule 624 (requires-expression)
570 postfix-expression → "dynamic_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 953
571 postfix-expression → "static_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 954
572 postfix-expression → "reinterpret_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 955
573 postfix-expression → "const_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 956
278 expression → expression • "," assignment-expression 574 postfix-expression → "typeid" "(" expression • ")" "," shift, and go to state 533 ")" shift, and go to state 957
575 postfix-expression → "typeid" "(" type-id • ")" ")" shift, and go to state 958
743 unary-expression → "sizeof" "..." "(" • IDENTIFIER ")" IDENTIFIER shift, and go to state 959
742 unary-expression → "sizeof" "(" type-id • ")" ")" shift, and go to state 960
744 unary-expression → "alignof" "(" type-id • ")" ")" shift, and go to state 961
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 123 capture → • simple-capture 124 | • init-capture 125 capture-default → • "&" 126 | • "=" 127 capture-list → • capture 128 | • capture-list "," capture 223 delete-expression → SCOPE-opt "delete" "[" • "]" cast-expression 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 379 lambda-capture → • capture-default 380 | • capture-list 381 | • capture-default "," capture-list 382 lambda-capture-opt → • %empty ["]"] 383 | • lambda-capture 388 lambda-introducer → "[" • lambda-capture-opt "]" 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 155 IDENTIFIER shift, and go to state 442 "this" shift, and go to state 443 "=" shift, and go to state 444 "&" shift, and go to state 445 "]" shift, and go to state 962 "*" shift, and go to state 446 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "]" [reduce using rule 382 (lambda-capture-opt)] ELLIPSIS-opt go to state 447 capture go to state 448 capture-default go to state 449 capture-list go to state 450 init-capture go to state 451 lambda-capture go to state 452 lambda-capture-opt go to state 453 simple-capture go to state 454
222 delete-expression → SCOPE-opt "delete" cast-expression • $default reduce using rule 222 (delete-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 472 new-placement → "(" • expression-list ")" 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression-list go to state 963 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 646 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
474 new-placement-opt → new-placement • $default reduce using rule 474 (new-placement-opt)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → SCOPE-opt "new" new-placement-opt • new-type-id new-initializer-opt 467 | SCOPE-opt "new" new-placement-opt • "(" type-id ")" new-initializer-opt 475 new-type-id → • type-specifier-seq new-declarator-opt 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "(" shift, and go to state 964 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 new-type-id go to state 965 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 966 typedef-name go to state 108 typename-specifier go to state 109
42 additive-expression → additive-expression "+" multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 440 multiplicative-expression → multiplicative-expression • "*" pm-expression 441 | multiplicative-expression • "/" pm-expression 442 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 558 "/" shift, and go to state 559 "%" shift, and go to state 560 $default reduce using rule 42 (additive-expression)
43 additive-expression → additive-expression "-" multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 440 multiplicative-expression → multiplicative-expression • "*" pm-expression 441 | multiplicative-expression • "/" pm-expression 442 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 558 "/" shift, and go to state 559 "%" shift, and go to state 560 $default reduce using rule 43 (additive-expression)
48 and-expression → and-expression "&" equality-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] 257 equality-expression → equality-expression • "==" relational-expression 258 | equality-expression • "!=" relational-expression "==" shift, and go to state 530 "!=" shift, and go to state 531 $default reduce using rule 48 (and-expression)
147 compare-expression → compare-expression "<=>" shift-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] 634 shift-expression → shift-expression • "<<" additive-expression 635 | shift-expression • ">>" additive-expression "<<" shift, and go to state 575 ">>" shift, and go to state 576 $default reduce using rule 147 (compare-expression)
257 equality-expression → equality-expression "==" relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", ">", "|"] 607 relational-expression → relational-expression • "<" compare-expression 608 | relational-expression • ">" compare-expression 609 | relational-expression • "<=" compare-expression 610 | relational-expression • ">=" compare-expression "<" shift, and go to state 571 ">" shift, and go to state 572 "<=" shift, and go to state 573 ">=" shift, and go to state 574 ">" [reduce using rule 257 (equality-expression)] $default reduce using rule 257 (equality-expression)
258 equality-expression → equality-expression "!=" relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", ">", "|"] 607 relational-expression → relational-expression • "<" compare-expression 608 | relational-expression • ">" compare-expression 609 | relational-expression • "<=" compare-expression 610 | relational-expression • ">=" compare-expression "<" shift, and go to state 571 ">" shift, and go to state 572 "<=" shift, and go to state 573 ">=" shift, and go to state 574 ">" [reduce using rule 258 (equality-expression)] $default reduce using rule 258 (equality-expression)
48 and-expression → and-expression • "&" equality-expression 263 exclusive-or-expression → exclusive-or-expression "^" and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] "&" shift, and go to state 528 $default reduce using rule 263 (exclusive-or-expression)
278 expression → expression "," assignment-expression • $default reduce using rule 278 (expression)
263 exclusive-or-expression → exclusive-or-expression • "^" and-expression 345 inclusive-or-expression → inclusive-or-expression "|" exclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">", "|"] "^" shift, and go to state 532 $default reduce using rule 345 (inclusive-or-expression)
385 lambda-declarator → "(" parameter-declaration-clause • ")" lambda-specifiers requires-clause-opt ")" shift, and go to state 967
387 lambda-expression → lambda-introducer "<" template-parameter-list • ">" requires-clause-opt lambda-declarator compound-statement 700 template-parameter-list → template-parameter-list • "," template-parameter "," shift, and go to state 424 ">" shift, and go to state 968
478 noexcept-specifier → "noexcept" • "(" constant-expression ")" 479 | "noexcept" • [",", "...", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] "(" shift, and go to state 969 "(" [reduce using rule 479 (noexcept-specifier)] $default reduce using rule 479 (noexcept-specifier)
481 noexcept-specifier-opt → noexcept-specifier • $default reduce using rule 481 (noexcept-specifier-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 389 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt • attribute-specifier-seq-opt trailing-return-type-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 970
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 149 compound-statement → "{" • statement-seq-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 672 statement-seq → • statement 673 | • statement-seq statement 674 statement-seq-opt → • %empty ["}"] 675 | • statement-seq 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 674 (statement-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 977 statement-seq go to state 978 statement-seq-opt go to state 979 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
386 lambda-expression → lambda-introducer lambda-declarator compound-statement • $default reduce using rule 386 (lambda-expression)
695 template-id → literal-operator-id "<" template-argument-list-opt • ">" ">" shift, and go to state 980
345 inclusive-or-expression → inclusive-or-expression • "|" exclusive-or-expression 395 logical-and-expression → logical-and-expression "&&" inclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">"] "|" shift, and go to state 535 $default reduce using rule 395 (logical-and-expression)
157 conditional-expression → logical-or-expression "?" expression • ":" assignment-expression 278 expression → expression • "," assignment-expression "," shift, and go to state 533 ":" shift, and go to state 981
395 logical-and-expression → logical-and-expression • "&&" inclusive-or-expression 397 logical-or-expression → logical-or-expression "||" logical-and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "||", ">"] "&&" shift, and go to state 543 $default reduce using rule 397 (logical-or-expression)
53 assignment-expression → logical-or-expression assignment-operator initializer-clause • $default reduce using rule 53 (assignment-expression)
440 multiplicative-expression → multiplicative-expression "*" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 557 pm-expression → pm-expression • ".*" cast-expression 558 | pm-expression • "->*" cast-expression ".*" shift, and go to state 563 "->*" shift, and go to state 564 $default reduce using rule 440 (multiplicative-expression)
441 multiplicative-expression → multiplicative-expression "/" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 557 pm-expression → pm-expression • ".*" cast-expression 558 | pm-expression • "->*" cast-expression ".*" shift, and go to state 563 "->*" shift, and go to state 564 $default reduce using rule 441 (multiplicative-expression)
442 multiplicative-expression → multiplicative-expression "%" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 557 pm-expression → pm-expression • ".*" cast-expression 558 | pm-expression • "->*" cast-expression ".*" shift, and go to state 563 "->*" shift, and go to state 564 $default reduce using rule 442 (multiplicative-expression)
696 template-name → IDENTIFIER • ["<"] 755 unqualified-id → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" reduce using rule 696 (template-name) "<" [reduce using rule 755 (unqualified-id)] $default reduce using rule 755 (unqualified-id)
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" 693 template-id → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 672 "::" [reduce using rule 693 (template-id)] $default reduce using rule 693 (template-id)
600 qualified-id → nested-name-specifier TEMPLATE-opt unqualified-id • $default reduce using rule 600 (qualified-id)
694 template-id → operator-function-id "<" template-argument-list-opt • ">" ">" shift, and go to state 982
557 pm-expression → pm-expression ".*" cast-expression • $default reduce using rule 557 (pm-expression)
558 pm-expression → pm-expression "->*" cast-expression • $default reduce using rule 558 (pm-expression)
281 expression-list-opt → expression-list • $default reduce using rule 281 (expression-list-opt)
561 postfix-expression → postfix-expression "(" expression-list-opt • ")" ")" shift, and go to state 983
560 postfix-expression → postfix-expression "[" expression-list-opt • "]" "]" shift, and go to state 984
137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 340 id-expression → • unqualified-id 341 | • qualified-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 567 postfix-expression → postfix-expression "->" TEMPLATE-opt • id-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "::" shift, and go to state 6 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "~" shift, and go to state 335 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 120 enum-name go to state 71 id-expression go to state 985 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 337 operator-function-id go to state 289 qualified-id go to state 293 simple-template-id go to state 297 template-id go to state 300 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 305
137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 340 id-expression → • unqualified-id 341 | • qualified-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 566 postfix-expression → postfix-expression "." TEMPLATE-opt • id-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "::" shift, and go to state 6 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "~" shift, and go to state 335 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 120 enum-name go to state 71 id-expression go to state 986 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 337 operator-function-id go to state 289 qualified-id go to state 293 simple-template-id go to state 297 template-id go to state 300 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 305
147 compare-expression → compare-expression • "<=>" shift-expression 607 relational-expression → relational-expression "<" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 529 $default reduce using rule 607 (relational-expression)
147 compare-expression → compare-expression • "<=>" shift-expression 608 relational-expression → relational-expression ">" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 529 $default reduce using rule 608 (relational-expression)
147 compare-expression → compare-expression • "<=>" shift-expression 609 relational-expression → relational-expression "<=" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 529 $default reduce using rule 609 (relational-expression)
147 compare-expression → compare-expression • "<=>" shift-expression 610 relational-expression → relational-expression ">=" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 529 $default reduce using rule 610 (relational-expression)
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 634 shift-expression → shift-expression "<<" additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 526 "-" shift, and go to state 527 $default reduce using rule 634 (shift-expression)
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 635 shift-expression → shift-expression ">>" additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 526 "-" shift, and go to state 527 $default reduce using rule 635 (shift-expression)
562 postfix-expression → simple-type-specifier "(" expression-list-opt • ")" ")" shift, and go to state 987
563 postfix-expression → typename-specifier "(" expression-list-opt • ")" ")" shift, and go to state 988
444 namespace-alias → IDENTIFIER • [";"] 450 namespace-name → IDENTIFIER • [";"] ";" reduce using rule 444 (namespace-alias) ";" [reduce using rule 450 (namespace-name)] $default reduce using rule 444 (namespace-alias)
601 qualified-namespace-specifier → nested-name-specifier-opt namespace-name • $default reduce using rule 601 (qualified-namespace-specifier)
445 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" • $default reduce using rule 445 (namespace-alias-definition)
235 enclosing-namespace-specifier → enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER • ["::"] 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER • "{" namespace-body "}" "{" shift, and go to state 989 $default reduce using rule 235 (enclosing-namespace-specifier)
677 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal • ")" ";" ")" shift, and go to state 990
676 static_assert-declaration → "static_assert" "(" constant-expression ")" ";" • $default reduce using rule 676 (static_assert-declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 443 | INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" • namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 446 namespace-body → • declaration-seq-opt 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 829 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 991 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
446 namespace-body → declaration-seq-opt • $default reduce using rule 446 (namespace-body)
754 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body • "}" "}" shift, and go to state 992
767 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name • ";" ";" shift, and go to state 993
46 alignment-specifier → "alignas" "(" constant-expression ELLIPSIS-opt • ")" ")" shift, and go to state 994
45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt • ")" ")" shift, and go to state 995
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" • ";" ";" shift, and go to state 996
76 attribute-namespace → IDENTIFIER • $default reduce using rule 76 (attribute-namespace)
87 attribute-using-prefix → "using" attribute-namespace • ":" ":" shift, and go to state 997
76 attribute-namespace → IDENTIFIER • ["::"] 85 attribute-token → IDENTIFIER • [",", "...", "(", "]"] "::" reduce using rule 76 (attribute-namespace) $default reduce using rule 85 (attribute-token)
74 attribute-list → attribute • "..." 78 attribute-opt → attribute • [",", "]"] "..." shift, and go to state 998 $default reduce using rule 78 (attribute-opt)
73 attribute-list → attribute-list • "," attribute-opt 75 | attribute-list • "," attribute "..." 80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list • "]" "]" "," shift, and go to state 999 "]" shift, and go to state 1000
79 attribute-scoped-token → attribute-namespace • "::" IDENTIFIER "::" shift, and go to state 1001
72 attribute-list → attribute-opt • $default reduce using rule 72 (attribute-list)
86 attribute-token → attribute-scoped-token • $default reduce using rule 86 (attribute-token)
67 attribute → attribute-token • attribute-argument-clause-opt 68 attribute-argument-clause → • "(" balanced-token-seq-opt ")" 69 attribute-argument-clause-opt → • %empty [",", "...", "]"] 70 | • attribute-argument-clause "(" shift, and go to state 1002 $default reduce using rule 69 (attribute-argument-clause-opt) attribute-argument-clause go to state 1003 attribute-argument-clause-opt go to state 1004
177 cv-qualifier-seq → cv-qualifier cv-qualifier-seq-opt • $default reduce using rule 177 (cv-qualifier-seq)
342 identifier-list → IDENTIFIER • $default reduce using rule 342 (identifier-list)
343 identifier-list → identifier-list • "," IDENTIFIER 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list • "]" initializer ";" "," shift, and go to state 1005 "]" shift, and go to state 1006
325 function-body → "=" • "default" ";" 326 | "=" • "delete" ";" "delete" shift, and go to state 1007 "default" shift, and go to state 1008
137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 172 ctor-initializer → ":" • mem-initializer-list 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 398 mem-initializer → • mem-initializer-id "(" expression-list-opt ")" 399 | • mem-initializer-id braced-init-list 400 mem-initializer-id → • class-or-decltype 401 | • IDENTIFIER 402 mem-initializer-list → • mem-initializer ELLIPSIS-opt 403 | • mem-initializer-list "," mem-initializer ELLIPSIS-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 1009 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1010 decltype-specifier go to state 873 enum-name go to state 71 mem-initializer go to state 1011 mem-initializer-id go to state 1012 mem-initializer-list go to state 1013 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 874 nested-name-specifier-opt go to state 875 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 331 function-try-block → "try" • ctor-initializer-opt compound-statement handler-seq ":" shift, and go to state 848 $default reduce using rule 173 (ctor-initializer-opt) ctor-initializer go to state 850 ctor-initializer-opt go to state 1014
174 ctor-initializer-opt → ctor-initializer • $default reduce using rule 174 (ctor-initializer-opt)
149 compound-statement → • "{" statement-seq-opt "}" 323 function-body → ctor-initializer-opt • compound-statement "{" shift, and go to state 793 compound-statement go to state 1015
328 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body • $default reduce using rule 328 (function-definition)
324 function-body → function-try-block • $default reduce using rule 324 (function-body)
772 virt-specifier-seq → virt-specifier-seq virt-specifier • $default reduce using rule 772 (virt-specifier-seq)
327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body • $default reduce using rule 327 (function-definition)
596 ptr-operator → nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt • $default reduce using rule 596 (ptr-operator)
175 cv-qualifier → • "const" 176 | • "volatile" 177 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → • %empty [",", "...", "noexcept", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "final", "&&", "->", ">", "try", "requires", "override"] 179 | • cv-qualifier-seq 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" • cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "const" shift, and go to state 15 "volatile" shift, and go to state 16 $default reduce using rule 178 (cv-qualifier-seq-opt) cv-qualifier go to state 607 cv-qualifier-seq go to state 608 cv-qualifier-seq-opt go to state 1016
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 548 parameter-declaration-clause → parameter-declaration-list "," • "..." 550 parameter-declaration-list → parameter-declaration-list "," • parameter-declaration "..." shift, and go to state 1017 $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 parameter-declaration go to state 1018
547 parameter-declaration-clause → parameter-declaration-list-opt ELLIPSIS-opt • $default reduce using rule 547 (parameter-declaration-clause)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 492 noptr-declarator → noptr-declarator "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1019
702 trailing-return-type → "->" type-id • $default reduce using rule 702 (trailing-return-type)
424 member-specification → access-specifier ":" member-specification-opt • $default reduce using rule 424 (member-specification)
12 IDENTIFIER-opt → IDENTIFIER • ["alignas", "[", ":"] 137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "<" reduce using rule 696 (template-name) $default reduce using rule 12 (IDENTIFIER-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 418 member-declarator → IDENTIFIER-opt • attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1020
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 118 brace-or-equal-initializer-opt → • %empty [",", ";"] 119 | • brace-or-equal-initializer 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator • virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator • requires-clause function-body 415 member-declarator → declarator • virt-specifier-seq-opt pure-specifier-opt 416 | declarator • requires-clause 417 | declarator • brace-or-equal-initializer-opt 621 requires-clause → • "requires" constraint-logical-or-expression 769 virt-specifier → • "override" 770 | • "final" 771 virt-specifier-seq → • virt-specifier 772 | • virt-specifier-seq virt-specifier 773 virt-specifier-seq-opt → • %empty [",", "=", ";", ":", "{", "try"] 774 | • virt-specifier-seq "=" shift, and go to state 377 "{" shift, and go to state 379 "final" shift, and go to state 611 "requires" shift, and go to state 380 "override" shift, and go to state 612 "," reduce using rule 118 (brace-or-equal-initializer-opt) "," [reduce using rule 773 (virt-specifier-seq-opt)] "=" [reduce using rule 773 (virt-specifier-seq-opt)] ";" reduce using rule 118 (brace-or-equal-initializer-opt) ";" [reduce using rule 773 (virt-specifier-seq-opt)] ":" reduce using rule 773 (virt-specifier-seq-opt) "{" [reduce using rule 773 (virt-specifier-seq-opt)] "try" reduce using rule 773 (virt-specifier-seq-opt) $default reduce using rule 118 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1021 brace-or-equal-initializer-opt go to state 1022 braced-init-list go to state 382 requires-clause go to state 1023 virt-specifier go to state 614 virt-specifier-seq go to state 615 virt-specifier-seq-opt go to state 1024
419 member-declarator-list → member-declarator • $default reduce using rule 419 (member-declarator-list)
420 member-declarator-list → member-declarator-list • "," member-declarator 422 member-declarator-list-opt → member-declarator-list • [";"] "," shift, and go to state 1025 $default reduce using rule 422 (member-declarator-list-opt)
404 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt • ";" ";" shift, and go to state 1026
236 enum-base → • ":" type-specifier-seq 237 enum-base-opt → • %empty [";"] 238 | • enum-base 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name • enum-base-opt ";" ":" shift, and go to state 662 $default reduce using rule 237 (enum-base-opt) enum-base go to state 663 enum-base-opt go to state 664
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 39 access-specifier-opt → • %empty [IDENTIFIER, "::", "decltype"] 40 | • access-specifier 103 base-specifier → attribute-specifier-seq-opt "virtual" • access-specifier-opt class-or-decltype "private" shift, and go to state 350 "protected" shift, and go to state 351 "public" shift, and go to state 352 $default reduce using rule 39 (access-specifier-opt) access-specifier go to state 1027 access-specifier-opt go to state 1028
27 VIRTUAL-opt → • %empty [IDENTIFIER, "::", "decltype"] 28 | • "virtual" 104 base-specifier → attribute-specifier-seq-opt access-specifier • VIRTUAL-opt class-or-decltype "virtual" shift, and go to state 1029 $default reduce using rule 27 (VIRTUAL-opt) VIRTUAL-opt go to state 1030
102 base-specifier → attribute-specifier-seq-opt class-or-decltype • $default reduce using rule 102 (base-specifier)
141 class-or-decltype → decltype-specifier • [",", "...", "(", "{"] 455 nested-name-specifier → decltype-specifier • "::" "::" shift, and go to state 188 $default reduce using rule 141 (class-or-decltype)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 140 class-or-decltype → nested-name-specifier • "template" simple-template-id 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] IDENTIFIER shift, and go to state 197 "template" shift, and go to state 1031 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 199
137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → nested-name-specifier-opt • type-name 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 506 class-name go to state 55 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 1032 typedef-name go to state 108
105 base-specifier-list → base-specifier ELLIPSIS-opt • $default reduce using rule 105 (base-specifier-list)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 102 base-specifier → • attribute-specifier-seq-opt class-or-decltype 103 | • attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | • attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 106 base-specifier-list → base-specifier-list "," • base-specifier ELLIPSIS-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 631 base-specifier go to state 1033
131 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt • $default reduce using rule 131 (class-head)
360 initializer → "(" expression-list ")" • $default reduce using rule 360 (initializer)
363 initializer-list → initializer-clause ELLIPSIS-opt • $default reduce using rule 363 (initializer-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 364 initializer-list → initializer-list "," • initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 1034 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
227 designator → "." IDENTIFIER • $default reduce using rule 227 (designator)
2 COMMA-opt → "," • ["}"] 224 designated-initializer-clause → • designator brace-or-equal-initializer 226 designated-initializer-list → designated-initializer-list "," • designated-initializer-clause 227 designator → • "." IDENTIFIER "." shift, and go to state 648 $default reduce using rule 2 (COMMA-opt) designated-initializer-clause go to state 1035 designator go to state 651
121 braced-init-list → "{" designated-initializer-list COMMA-opt • "}" "}" shift, and go to state 1036
224 designated-initializer-clause → designator brace-or-equal-initializer • $default reduce using rule 224 (designated-initializer-clause)
2 COMMA-opt → "," • ["}"] 19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 364 initializer-list → initializer-list "," • initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "}" reduce using rule 2 (COMMA-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 1034 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
120 braced-init-list → "{" initializer-list COMMA-opt • "}" "}" shift, and go to state 1037
137 class-name → • IDENTIFIER 138 | • simple-template-id 163 constraint-logical-and-expression → constraint-logical-and-expression "&&" • primary-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "::" shift, and go to state 6 "this" shift, and go to state 241 "(" shift, and go to state 653 "[" shift, and go to state 246 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "requires" shift, and go to state 250 "~" shift, and go to state 335 "literal" shift, and go to state 259 STRING_LITERAL shift, and go to state 117 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 120 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 337 operator-function-id go to state 289 primary-expression go to state 1038 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 305
137 class-name → • IDENTIFIER 138 | • simple-template-id 162 constraint-logical-and-expression → • primary-expression 163 | • constraint-logical-and-expression "&&" primary-expression 165 constraint-logical-or-expression → constraint-logical-or-expression "||" • constraint-logical-and-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "::" shift, and go to state 6 "this" shift, and go to state 241 "(" shift, and go to state 653 "[" shift, and go to state 246 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "requires" shift, and go to state 250 "~" shift, and go to state 335 "literal" shift, and go to state 259 STRING_LITERAL shift, and go to state 117 class-name go to state 55 constraint-logical-and-expression go to state 1039 conversion-function-id go to state 272 decltype-specifier go to state 120 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 337 operator-function-id go to state 289 primary-expression go to state 656 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 305
251 enumerator-definition → enumerator "=" constant-expression • $default reduce using rule 251 (enumerator-definition)
248 enum-specifier → enum-head "{" enumerator-list "," "}" • $default reduce using rule 248 (enum-specifier)
253 enumerator-list → enumerator-list "," enumerator-definition • $default reduce using rule 253 (enumerator-list)
236 enum-base → ":" type-specifier-seq • $default reduce using rule 236 (enum-base)
496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" • $default reduce using rule 496 (opaque-enum-declaration)
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" • "->" simple-template-id ";" "->" shift, and go to state 1040
438 module-partition-opt → module-partition • $default reduce using rule 438 (module-partition-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 427 module-declaration → EXPORT-opt "module" module-name module-partition-opt • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1041
584 private-module-fragment → "module" ":" • "private" ";" declaration-seq-opt "private" shift, and go to state 1042
709 type-constraint → nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" • $default reduce using rule 709 (type-constraint)
150 concept-definition → "concept" concept-name "=" constraint-expression • ";" ";" shift, and go to state 1043
161 constraint-expression → logical-or-expression • [";"] 397 logical-or-expression → logical-or-expression • "||" logical-and-expression "||" shift, and go to state 556 $default reduce using rule 161 (constraint-expression)
229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 1044
5 ELLIPSIS-opt → • %empty [",", ">"] 6 | • "..." 687 template-argument-list → template-argument-list "," template-argument • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1045
482 noptr-abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers 483 | noptr-abstract-declarator-opt • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 346 "[" shift, and go to state 907 parameters-and-qualifiers go to state 1046
484 noptr-abstract-declarator → "(" ptr-abstract-declarator • ")" ")" shift, and go to state 1047
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 588 | ptr-operator • ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → • %empty [")"] 590 | • ptr-abstract-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 682 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] ")" reduce using rule 589 (ptr-abstract-declarator-opt) $default reduce using rule 485 (noptr-abstract-declarator-opt) class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 904 ptr-abstract-declarator go to state 912 ptr-abstract-declarator-opt go to state 913 ptr-operator go to state 906 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 159 constant-expression-opt → • %empty ["]"] 160 | • constant-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 483 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" • constant-expression-opt "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 159 (constant-expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 622 constant-expression-opt go to state 1048 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
30 abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • trailing-return-type 482 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] 702 trailing-return-type → • "->" type-id "->" shift, and go to state 624 $default reduce using rule 482 (noptr-abstract-declarator) trailing-return-type go to state 1049
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 159 constant-expression-opt → • %empty ["]"] 160 | • constant-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 488 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" • constant-expression-opt "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 159 (constant-expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 622 constant-expression-opt go to state 1050 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
487 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator parameters-and-qualifiers • $default reduce using rule 487 (noptr-abstract-pack-declarator)
35 abstract-pack-declarator → ptr-operator abstract-pack-declarator • $default reduce using rule 35 (abstract-pack-declarator)
590 ptr-abstract-declarator-opt → ptr-abstract-declarator • $default reduce using rule 590 (ptr-abstract-declarator-opt)
588 ptr-abstract-declarator → ptr-operator ptr-abstract-declarator-opt • $default reduce using rule 588 (ptr-abstract-declarator)
555 placeholder-type-specifier → type-constraint-opt "decltype" "(" "auto" ")" • $default reduce using rule 555 (placeholder-type-specifier)
6 ELLIPSIS-opt → "..." • [IDENTIFIER, "::", "operator", "decltype", "~"] 489 noptr-abstract-pack-declarator → "..." • [",", "...", "=", "(", ")", "[", ">"] IDENTIFIER reduce using rule 6 (ELLIPSIS-opt) "::" reduce using rule 6 (ELLIPSIS-opt) "operator" reduce using rule 6 (ELLIPSIS-opt) "decltype" reduce using rule 6 (ELLIPSIS-opt) "~" reduce using rule 6 (ELLIPSIS-opt) $default reduce using rule 489 (noptr-abstract-pack-declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 484 | "(" • ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 493 | "(" • ptr-declarator ")" 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 916 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 904 noptr-declarator go to state 328 ptr-abstract-declarator go to state 905 ptr-declarator go to state 329 ptr-operator go to state 1051 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
545 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt • [",", "...", ")", ">"] 546 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt • "=" initializer-clause "=" shift, and go to state 1052 $default reduce using rule 545 (parameter-declaration)
543 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator • [",", "...", ")", ">"] 544 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator • "=" initializer-clause "=" shift, and go to state 1053 $default reduce using rule 543 (parameter-declaration)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 35 | ptr-operator • abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 588 | ptr-operator • ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → • %empty [",", "...", "=", ")", ">"] 590 | • ptr-abstract-declarator 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 592 | ptr-operator • ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 915 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 916 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "..." [reduce using rule 589 (ptr-abstract-declarator-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 589 (ptr-abstract-declarator-opt) ELLIPSIS-opt go to state 164 abstract-pack-declarator go to state 911 class-name go to state 55 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 904 noptr-abstract-pack-declarator go to state 688 noptr-declarator go to state 328 ptr-abstract-declarator go to state 912 ptr-abstract-declarator-opt go to state 913 ptr-declarator go to state 349 ptr-operator go to state 919 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
720 type-parameter → template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 720 (type-parameter)
137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 340 id-expression → • unqualified-id 341 | • qualified-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 721 type-parameter → template-head type-parameter-key IDENTIFIER-opt "=" • id-expression 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "::" shift, and go to state 6 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "~" shift, and go to state 335 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 120 enum-name go to state 71 id-expression go to state 1054 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 337 operator-function-id go to state 289 qualified-id go to state 293 simple-template-id go to state 297 template-id go to state 300 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 305
719 type-parameter → type-constraint IDENTIFIER-opt "=" type-id • $default reduce using rule 719 (type-parameter)
717 type-parameter → type-parameter-key IDENTIFIER-opt "=" type-id • $default reduce using rule 717 (type-parameter)
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" • $default reduce using rule 44 (alias-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 220 defining-type-specifier-seq → defining-type-specifier attribute-specifier-seq-opt • ["...", IDENTIFIER, "::", ";", "(", "&", "[", "&&", "decltype", "*"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "[" [reduce using rule 220 (defining-type-specifier-seq)] $default reduce using rule 220 (defining-type-specifier-seq) alignment-specifier go to state 165 attribute-specifier go to state 166
221 defining-type-specifier-seq → defining-type-specifier defining-type-specifier-seq • $default reduce using rule 221 (defining-type-specifier-seq)
216 defining-type-id → defining-type-specifier-seq abstract-declarator-opt • $default reduce using rule 216 (defining-type-id)
477 noexcept-expression → "noexcept" "(" expression ")" • $default reduce using rule 477 (noexcept-expression)
286 fold-expression → "(" "..." fold-operator cast-expression • ")" ")" shift, and go to state 1055
285 fold-expression → "(" cast-expression fold-operator "..." • ")" 287 | "(" cast-expression fold-operator "..." • fold-operator cast-expression ")" 288 fold-operator → • "+" 289 | • "-" 290 | • "*" 291 | • "/" 292 | • "%" 293 | • "^" 294 | • "&" 295 | • "|" 296 | • "<<" 297 | • ">>" 298 | • "+=" 299 | • "-=" 300 | • "*=" 301 | • "/=" 302 | • "%=" 303 | • "^=" 304 | • "&=" 305 | • "|=" 306 | • "<<=" 307 | • ">>=" 308 | • "=" 309 | • "==" 310 | • "!=" 311 | • "<" 312 | • ">" 313 | • "<=" 314 | • ">=" 315 | • "&&" 316 | • "||" 317 | • "," 318 | • ".*" 319 | • "->*" "," shift, and go to state 708 "+" shift, and go to state 709 "-" shift, and go to state 710 "=" shift, and go to state 711 ")" shift, and go to state 1056 "&" shift, and go to state 712 "*=" shift, and go to state 713 "/=" shift, and go to state 714 "%=" shift, and go to state 715 "+=" shift, and go to state 716 "-=" shift, and go to state 717 ">>=" shift, and go to state 718 "<<=" shift, and go to state 719 "&=" shift, and go to state 720 "^=" shift, and go to state 721 "|=" shift, and go to state 722 "&&" shift, and go to state 723 "||" shift, and go to state 724 "==" shift, and go to state 725 "!=" shift, and go to state 726 "^" shift, and go to state 727 "<" shift, and go to state 728 ">" shift, and go to state 729 "*" shift, and go to state 730 "/" shift, and go to state 731 "%" shift, and go to state 732 "|" shift, and go to state 733 "<<" shift, and go to state 734 ">>" shift, and go to state 735 "<=" shift, and go to state 736 ">=" shift, and go to state 737 ".*" shift, and go to state 738 "->*" shift, and go to state 739 fold-operator go to state 1057
130 cast-expression → "(" type-id ")" cast-expression • $default reduce using rule 130 (cast-expression)
637 simple-capture → "&" IDENTIFIER ELLIPSIS-opt • $default reduce using rule 637 (simple-capture)
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 347 init-capture → "&" ELLIPSIS-opt IDENTIFIER • initializer 359 initializer → • brace-or-equal-initializer 360 | • "(" expression-list ")" "=" shift, and go to state 377 "(" shift, and go to state 378 "{" shift, and go to state 379 brace-or-equal-initializer go to state 381 braced-init-list go to state 382 initializer go to state 1058
346 init-capture → ELLIPSIS-opt IDENTIFIER initializer • $default reduce using rule 346 (init-capture)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 347 init-capture → "&" • ELLIPSIS-opt IDENTIFIER initializer 637 simple-capture → "&" • IDENTIFIER ELLIPSIS-opt "..." shift, and go to state 155 IDENTIFIER shift, and go to state 745 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 746
128 capture-list → capture-list • "," capture 381 lambda-capture → capture-default "," capture-list • ["]"] "," shift, and go to state 750 $default reduce using rule 381 (lambda-capture)
128 capture-list → capture-list "," capture • $default reduce using rule 128 (capture-list)
502 overloadable-operator → "delete" "[" "]" • $default reduce using rule 502 (overloadable-operator)
501 overloadable-operator → "new" "[" "]" • $default reduce using rule 501 (overloadable-operator)
498 operator-function-id → "operator" overloadable-operator "<" template-argument-list-opt • ">" ">" shift, and go to state 1059
166 conversion-declarator → ptr-operator conversion-declarator-opt • $default reduce using rule 166 (conversion-declarator)
616 requirement-parameter-list → "(" parameter-declaration-clause ")" • $default reduce using rule 616 (requirement-parameter-list)
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 724 type-requirement → "typename" • nested-name-specifier-opt type-name ";" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → "typename" • nested-name-specifier IDENTIFIER 734 | "typename" • nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 1060 nested-name-specifier-opt go to state 1061 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 148 compound-requirement → "{" • expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1062 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 161 constraint-expression → • logical-or-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 461 nested-requirement → "requires" • constraint-expression ";" 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 616 requirement-parameter-list → • "(" parameter-declaration-clause ")" 617 requirement-parameter-list-opt → • %empty ["{"] 618 | • requirement-parameter-list 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 624 | "requires" • requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 1063 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "{" reduce using rule 617 (requirement-parameter-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 constraint-expression go to state 1064 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 901 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requirement-parameter-list go to state 504 requirement-parameter-list-opt go to state 505 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
613 requirement → compound-requirement • $default reduce using rule 613 (requirement)
278 expression → expression • "," assignment-expression 643 simple-requirement → expression • ";" "," shift, and go to state 533 ";" shift, and go to state 1065
614 requirement → nested-requirement • $default reduce using rule 614 (requirement)
619 requirement-seq → requirement • $default reduce using rule 619 (requirement-seq)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 148 compound-requirement → • "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 461 nested-requirement → • "requires" constraint-expression ";" 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 611 requirement → • simple-requirement 612 | • type-requirement 613 | • compound-requirement 614 | • nested-requirement 615 requirement-body → "{" requirement-seq • "}" 620 requirement-seq → requirement-seq • requirement 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 643 simple-requirement → • expression ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 724 type-requirement → • "typename" nested-name-specifier-opt type-name ";" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 943 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 944 "}" shift, and go to state 1066 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 945 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 compound-requirement go to state 946 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 947 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 nested-requirement go to state 948 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requirement go to state 1067 requires-expression go to state 295 shift-expression go to state 296 simple-requirement go to state 951 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-requirement go to state 952 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
611 requirement → simple-requirement • $default reduce using rule 611 (requirement)
612 requirement → type-requirement • $default reduce using rule 612 (requirement)
570 postfix-expression → "dynamic_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1068
571 postfix-expression → "static_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1069
572 postfix-expression → "reinterpret_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1070
573 postfix-expression → "const_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1071
574 postfix-expression → "typeid" "(" expression ")" • $default reduce using rule 574 (postfix-expression)
575 postfix-expression → "typeid" "(" type-id ")" • $default reduce using rule 575 (postfix-expression)
743 unary-expression → "sizeof" "..." "(" IDENTIFIER • ")" ")" shift, and go to state 1072
742 unary-expression → "sizeof" "(" type-id ")" • $default reduce using rule 742 (unary-expression)
744 unary-expression → "alignof" "(" type-id ")" • $default reduce using rule 744 (unary-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 223 | SCOPE-opt "delete" "[" "]" • cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 1073 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
472 new-placement → "(" expression-list • ")" ")" shift, and go to state 1074
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 467 new-expression → SCOPE-opt "new" new-placement-opt "(" • type-id ")" new-initializer-opt 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 1075 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 109
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 466 new-expression → SCOPE-opt "new" new-placement-opt new-type-id • new-initializer-opt 468 new-initializer → • "(" expression-list-opt ")" 469 | • braced-init-list 470 new-initializer-opt → • %empty [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 471 | • new-initializer "(" shift, and go to state 1076 "{" shift, and go to state 379 "{" [reduce using rule 470 (new-initializer-opt)] $default reduce using rule 470 (new-initializer-opt) braced-init-list go to state 1077 new-initializer go to state 1078 new-initializer-opt go to state 1079
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 462 new-declarator → • ptr-operator new-declarator-opt 463 | • noptr-new-declarator 464 new-declarator-opt → • %empty [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 465 | • new-declarator 475 new-type-id → type-specifier-seq • new-declarator-opt 494 noptr-new-declarator → • "[" expression-opt "]" attribute-specifier-seq-opt 495 | • noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 159 "[" shift, and go to state 1080 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "&" [reduce using rule 464 (new-declarator-opt)] "&&" [reduce using rule 464 (new-declarator-opt)] "*" [reduce using rule 464 (new-declarator-opt)] $default reduce using rule 464 (new-declarator-opt) class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 new-declarator go to state 1081 new-declarator-opt go to state 1082 noptr-new-declarator go to state 1083 ptr-operator go to state 1084 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->", "requires"] 192 | • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 385 lambda-declarator → "(" parameter-declaration-clause ")" • lambda-specifiers requires-clause-opt 389 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 191 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 538 decl-specifier-seq-opt go to state 539 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 lambda-specifiers go to state 1085 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
387 lambda-expression → lambda-introducer "<" template-parameter-list ">" • requires-clause-opt lambda-declarator compound-statement 621 requires-clause → • "requires" constraint-logical-or-expression 622 requires-clause-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "alignas", "(", "[", "{", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 623 | • requires-clause "requires" shift, and go to state 380 $default reduce using rule 622 (requires-clause-opt) requires-clause go to state 697 requires-clause-opt go to state 1086
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 478 noexcept-specifier → "noexcept" "(" • constant-expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 1087 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 389 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt • trailing-return-type-opt 702 trailing-return-type → • "->" type-id 703 trailing-return-type-opt → • %empty ["{", "requires"] 704 | • trailing-return-type "alignas" shift, and go to state 157 "[" shift, and go to state 161 "->" shift, and go to state 624 $default reduce using rule 703 (trailing-return-type-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 trailing-return-type go to state 1088 trailing-return-type-opt go to state 1089
445 namespace-alias-definition → "namespace" • IDENTIFIER "=" qualified-namespace-specifier ";" IDENTIFIER shift, and go to state 1090
84 attribute-specifier-seq-opt → attribute-specifier-seq • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 641 simple-declaration → attribute-specifier-seq • decl-specifier-seq init-declarator-list ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 84 (attribute-specifier-seq-opt)] "extern" [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 84 (attribute-specifier-seq-opt)] "::" [reduce using rule 84 (attribute-specifier-seq-opt)] "typename" [reduce using rule 84 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 84 (attribute-specifier-seq-opt)] "class" [reduce using rule 84 (attribute-specifier-seq-opt)] "struct" [reduce using rule 84 (attribute-specifier-seq-opt)] "union" [reduce using rule 84 (attribute-specifier-seq-opt)] "const" [reduce using rule 84 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 84 (attribute-specifier-seq-opt)] "friend" [reduce using rule 84 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 84 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 84 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 84 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 84 (attribute-specifier-seq-opt)] "auto" reduce using rule 84 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 84 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "bool" [reduce using rule 84 (attribute-specifier-seq-opt)] "short" [reduce using rule 84 (attribute-specifier-seq-opt)] "int" [reduce using rule 84 (attribute-specifier-seq-opt)] "long" [reduce using rule 84 (attribute-specifier-seq-opt)] "signed" [reduce using rule 84 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 84 (attribute-specifier-seq-opt)] "float" [reduce using rule 84 (attribute-specifier-seq-opt)] "double" [reduce using rule 84 (attribute-specifier-seq-opt)] "void" [reduce using rule 84 (attribute-specifier-seq-opt)] "static" [reduce using rule 84 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 84 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 84 (attribute-specifier-seq-opt)] $default reduce using rule 84 (attribute-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 152 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 49 asm-declaration → attribute-specifier-seq-opt • "asm" "(" string-literal ")" ";" 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 149 compound-statement → • "{" statement-seq-opt "}" 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 171 coroutine-return-statement → • "co_return" expr-or-braced-init-list-opt ";" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [";"] 283 | • expression 284 expression-statement → • expression-opt ";" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 329 function-specifier → • "virtual" 330 | • explicit-specifier 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 367 iteration-statement → • "while" "(" condition ")" statement 368 | • "do" statement "while" "(" expression ")" ";" 369 | • "for" "(" init-statement condition-opt ";" expression-opt ")" statement 370 | • "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 371 jump-statement → • "break" ";" 372 | • "continue" ";" 373 | • "return" expr-or-braced-init-list-opt ";" 374 | • coroutine-return-statement 375 | • "goto" IDENTIFIER ";" 376 labeled-statement → attribute-specifier-seq-opt • IDENTIFIER ":" statement 377 | attribute-specifier-seq-opt • "case" constant-expression ":" statement 378 | attribute-specifier-seq-opt • "default" ":" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 628 selection-statement → • "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement 629 | • "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 630 | • "if" NOT-opt "consteval" compound-statement 631 | • "if" NOT-opt "consteval" compound-statement "else" statement 632 | • "switch" "(" init-statement-opt condition ")" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 642 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 665 statement → attribute-specifier-seq-opt • expression-statement 666 | attribute-specifier-seq-opt • compound-statement 667 | attribute-specifier-seq-opt • selection-statement 668 | attribute-specifier-seq-opt • iteration-statement 669 | attribute-specifier-seq-opt • jump-statement 671 | attribute-specifier-seq-opt • try-block 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 707 try-block → • "try" compound-statement handler-seq 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 767 using-directive → attribute-specifier-seq-opt • "using" "namespace" nested-name-specifier-opt namespace-name ";" 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 1091 "inline" shift, and go to state 150 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 242 "-" shift, and go to state 243 "using" shift, and go to state 156 "alignas" shift, and go to state 157 "(" shift, and go to state 244 "&" shift, and go to state 245 "asm" shift, and go to state 160 "[" shift, and go to state 1092 "co_await" shift, and go to state 247 "{" shift, and go to state 793 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "co_return" shift, and go to state 1093 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 249 "default" shift, and go to state 1094 "try" shift, and go to state 1095 "while" shift, and go to state 1096 "do" shift, and go to state 1097 "for" shift, and go to state 1098 "break" shift, and go to state 1099 "continue" shift, and go to state 1100 "return" shift, and go to state 1101 "goto" shift, and go to state 1102 "case" shift, and go to state 1103 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "if" shift, and go to state 1104 "switch" shift, and go to state 1105 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ";" reduce using rule 282 (expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 alignment-specifier go to state 165 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier go to state 166 await-expression go to state 268 cast-expression go to state 269 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 270 compound-statement go to state 1106 conditional-expression go to state 271 conversion-function-id go to state 272 coroutine-return-statement go to state 1107 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1108 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 274 exclusive-or-expression go to state 275 explicit-specifier go to state 154 expression go to state 1109 expression-opt go to state 1110 expression-statement go to state 1111 fold-expression go to state 277 function-specifier go to state 79 id-expression go to state 278 inclusive-or-expression go to state 279 iteration-statement go to state 1112 jump-statement go to state 1113 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 selection-statement go to state 1114 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 storage-class-specifier go to state 99 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 try-block go to state 1115 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
210 declaration-statement → block-declaration • $default reduce using rule 210 (declaration-statement)
670 statement → declaration-statement • $default reduce using rule 670 (statement)
664 statement → labeled-statement • $default reduce using rule 664 (statement)
672 statement-seq → statement • $default reduce using rule 672 (statement-seq)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 673 statement-seq → statement-seq • statement 675 statement-seq-opt → statement-seq • ["}"] 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 675 (statement-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1116 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
149 compound-statement → "{" statement-seq-opt • "}" "}" shift, and go to state 1117
695 template-id → literal-operator-id "<" template-argument-list-opt ">" • $default reduce using rule 695 (template-id)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 157 | logical-or-expression "?" expression ":" • assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 1118 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
694 template-id → operator-function-id "<" template-argument-list-opt ">" • $default reduce using rule 694 (template-id)
561 postfix-expression → postfix-expression "(" expression-list-opt ")" • $default reduce using rule 561 (postfix-expression)
560 postfix-expression → postfix-expression "[" expression-list-opt "]" • $default reduce using rule 560 (postfix-expression)
567 postfix-expression → postfix-expression "->" TEMPLATE-opt id-expression • $default reduce using rule 567 (postfix-expression)
566 postfix-expression → postfix-expression "." TEMPLATE-opt id-expression • $default reduce using rule 566 (postfix-expression)
562 postfix-expression → simple-type-specifier "(" expression-list-opt ")" • $default reduce using rule 562 (postfix-expression)
563 postfix-expression → typename-specifier "(" expression-list-opt ")" • $default reduce using rule 563 (postfix-expression)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 446 namespace-body → • declaration-seq-opt 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 460 | "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" • namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 829 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 1119 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
677 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal ")" • ";" ";" shift, and go to state 1120
443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body • "}" "}" shift, and go to state 1121
754 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" • $default reduce using rule 754 (unnamed-namespace-definition)
767 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" • $default reduce using rule 767 (using-directive)
46 alignment-specifier → "alignas" "(" constant-expression ELLIPSIS-opt ")" • $default reduce using rule 46 (alignment-specifier)
45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt ")" • $default reduce using rule 45 (alignment-specifier)
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" • $default reduce using rule 49 (asm-declaration)
87 attribute-using-prefix → "using" attribute-namespace ":" • $default reduce using rule 87 (attribute-using-prefix)
74 attribute-list → attribute "..." • $default reduce using rule 74 (attribute-list)
67 attribute → • attribute-token attribute-argument-clause-opt 73 attribute-list → attribute-list "," • attribute-opt 75 | attribute-list "," • attribute "..." 76 attribute-namespace → • IDENTIFIER 77 attribute-opt → • %empty [",", "]"] 78 | • attribute 79 attribute-scoped-token → • attribute-namespace "::" IDENTIFIER 85 attribute-token → • IDENTIFIER 86 | • attribute-scoped-token IDENTIFIER shift, and go to state 837 $default reduce using rule 77 (attribute-opt) attribute go to state 1122 attribute-namespace go to state 840 attribute-opt go to state 1123 attribute-scoped-token go to state 842 attribute-token go to state 843
80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" • "]" "]" shift, and go to state 1124
79 attribute-scoped-token → attribute-namespace "::" • IDENTIFIER IDENTIFIER shift, and go to state 1125
68 attribute-argument-clause → "(" • balanced-token-seq-opt ")" 91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty [")"] 98 | • balanced-token-seq "(" shift, and go to state 1126 "[" shift, and go to state 1127 "{" shift, and go to state 1128 BALANCED_TOKEN shift, and go to state 1129 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1130 balanced-token-seq go to state 1131 balanced-token-seq-opt go to state 1132
70 attribute-argument-clause-opt → attribute-argument-clause • $default reduce using rule 70 (attribute-argument-clause-opt)
67 attribute → attribute-token attribute-argument-clause-opt • $default reduce using rule 67 (attribute)
343 identifier-list → identifier-list "," • IDENTIFIER IDENTIFIER shift, and go to state 1133
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 359 initializer → • brace-or-equal-initializer 360 | • "(" expression-list ")" 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" • initializer ";" "=" shift, and go to state 377 "(" shift, and go to state 378 "{" shift, and go to state 379 brace-or-equal-initializer go to state 381 braced-init-list go to state 382 initializer go to state 1134
326 function-body → "=" "delete" • ";" ";" shift, and go to state 1135
325 function-body → "=" "default" • ";" ";" shift, and go to state 1136
137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 401 mem-initializer-id → IDENTIFIER • ["(", "{"] 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "<" reduce using rule 696 (template-name) $default reduce using rule 401 (mem-initializer-id)
400 mem-initializer-id → class-or-decltype • $default reduce using rule 400 (mem-initializer-id)
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 402 mem-initializer-list → mem-initializer • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1137
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 398 mem-initializer → mem-initializer-id • "(" expression-list-opt ")" 399 | mem-initializer-id • braced-init-list "(" shift, and go to state 1138 "{" shift, and go to state 379 braced-init-list go to state 1139
172 ctor-initializer → ":" mem-initializer-list • ["{"] 403 mem-initializer-list → mem-initializer-list • "," mem-initializer ELLIPSIS-opt "," shift, and go to state 1140 $default reduce using rule 172 (ctor-initializer)
149 compound-statement → • "{" statement-seq-opt "}" 331 function-try-block → "try" ctor-initializer-opt • compound-statement handler-seq "{" shift, and go to state 793 compound-statement go to state 1141
323 function-body → ctor-initializer-opt compound-statement • $default reduce using rule 323 (function-body)
553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt • ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 602 ref-qualifier → • "&" 603 | • "&&" 604 ref-qualifier-opt → • %empty [",", "...", "noexcept", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] 605 | • ref-qualifier "&" shift, and go to state 338 "&&" shift, and go to state 339 $default reduce using rule 604 (ref-qualifier-opt) ref-qualifier go to state 340 ref-qualifier-opt go to state 1142
548 parameter-declaration-clause → parameter-declaration-list "," "..." • $default reduce using rule 548 (parameter-declaration-clause)
550 parameter-declaration-list → parameter-declaration-list "," parameter-declaration • $default reduce using rule 550 (parameter-declaration-list)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 492 noptr-declarator → noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "[" [reduce using rule 492 (noptr-declarator)] $default reduce using rule 492 (noptr-declarator) alignment-specifier go to state 165 attribute-specifier go to state 166
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 418 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt • ":" constant-expression brace-or-equal-initializer-opt "alignas" shift, and go to state 157 "[" shift, and go to state 161 ":" shift, and go to state 1143 alignment-specifier go to state 165 attribute-specifier go to state 166
119 brace-or-equal-initializer-opt → brace-or-equal-initializer • $default reduce using rule 119 (brace-or-equal-initializer-opt)
417 member-declarator → declarator brace-or-equal-initializer-opt • $default reduce using rule 417 (member-declarator)
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 323 function-body → • ctor-initializer-opt compound-statement 324 | • function-try-block 325 | • "=" "default" ";" 326 | • "=" "delete" ";" 328 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause • function-body 331 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq 416 member-declarator → declarator requires-clause • [",", ";"] "=" shift, and go to state 847 ":" shift, and go to state 848 "try" shift, and go to state 849 "{" reduce using rule 173 (ctor-initializer-opt) $default reduce using rule 416 (member-declarator) ctor-initializer go to state 850 ctor-initializer-opt go to state 851 function-body go to state 852 function-try-block go to state 853
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 323 function-body → • ctor-initializer-opt compound-statement 324 | • function-try-block 325 | • "=" "default" ";" 326 | • "=" "delete" ";" 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt • function-body 331 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq 415 member-declarator → declarator virt-specifier-seq-opt • pure-specifier-opt 597 pure-specifier → • "=" '0' 598 pure-specifier-opt → • %empty [",", ";"] 599 | • pure-specifier "=" shift, and go to state 1144 ":" shift, and go to state 848 "try" shift, and go to state 849 "{" reduce using rule 173 (ctor-initializer-opt) $default reduce using rule 598 (pure-specifier-opt) ctor-initializer go to state 850 ctor-initializer-opt go to state 851 function-body go to state 855 function-try-block go to state 853 pure-specifier go to state 1145 pure-specifier-opt go to state 1146
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["alignas", "[", ":"] 12 | • IDENTIFIER 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 415 member-declarator → • declarator virt-specifier-seq-opt pure-specifier-opt 416 | • declarator requires-clause 417 | • declarator brace-or-equal-initializer-opt 418 | • IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 420 member-declarator-list → member-declarator-list "," • member-declarator 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 863 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 11 (IDENTIFIER-opt) ELLIPSIS-opt go to state 164 IDENTIFIER-opt go to state 864 class-name go to state 55 declarator go to state 1147 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 member-declarator go to state 1148 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 172 ptr-declarator go to state 173 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
404 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" • $default reduce using rule 404 (member-declaration)
40 access-specifier-opt → access-specifier • $default reduce using rule 40 (access-specifier-opt)
103 base-specifier → attribute-specifier-seq-opt "virtual" access-specifier-opt • class-or-decltype 137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1149 decltype-specifier go to state 873 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 874 nested-name-specifier-opt go to state 875 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
28 VIRTUAL-opt → "virtual" • $default reduce using rule 28 (VIRTUAL-opt)
104 base-specifier → attribute-specifier-seq-opt access-specifier VIRTUAL-opt • class-or-decltype 137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1150 decltype-specifier go to state 873 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 874 nested-name-specifier-opt go to state 875 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
22 TEMPLATE-opt → "template" • [IDENTIFIER] 140 class-or-decltype → nested-name-specifier "template" • simple-template-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 191 IDENTIFIER [reduce using rule 22 (TEMPLATE-opt)] simple-template-id go to state 1151 template-name go to state 102
139 class-or-decltype → nested-name-specifier-opt type-name • $default reduce using rule 139 (class-or-decltype)
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 106 base-specifier-list → base-specifier-list "," base-specifier • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1152
5 ELLIPSIS-opt → • %empty [",", ")", "]", "}"] 6 | • "..." 364 initializer-list → initializer-list "," initializer-clause • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1153
226 designated-initializer-list → designated-initializer-list "," designated-initializer-clause • $default reduce using rule 226 (designated-initializer-list)
121 braced-init-list → "{" designated-initializer-list COMMA-opt "}" • $default reduce using rule 121 (braced-init-list)
120 braced-init-list → "{" initializer-list COMMA-opt "}" • $default reduce using rule 120 (braced-init-list)
163 constraint-logical-and-expression → constraint-logical-and-expression "&&" primary-expression • $default reduce using rule 163 (constraint-logical-and-expression)
163 constraint-logical-and-expression → constraint-logical-and-expression • "&&" primary-expression 165 constraint-logical-or-expression → constraint-logical-or-expression "||" constraint-logical-and-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "&&" shift, and go to state 888 "&&" [reduce using rule 165 (constraint-logical-or-expression)] $default reduce using rule 165 (constraint-logical-or-expression)
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" • simple-template-id ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 191 simple-template-id go to state 1154 template-name go to state 102
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 427 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt • ";" ";" shift, and go to state 1155 "alignas" shift, and go to state 157 "[" shift, and go to state 161 alignment-specifier go to state 165 attribute-specifier go to state 166
584 private-module-fragment → "module" ":" "private" • ";" declaration-seq-opt ";" shift, and go to state 1156
150 concept-definition → "concept" concept-name "=" constraint-expression ";" • $default reduce using rule 150 (concept-definition)
229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER • $default reduce using rule 229 (elaborated-type-specifier)
687 template-argument-list → template-argument-list "," template-argument ELLIPSIS-opt • $default reduce using rule 687 (template-argument-list)
482 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • $default reduce using rule 482 (noptr-abstract-declarator)
484 noptr-abstract-declarator → "(" ptr-abstract-declarator ")" • $default reduce using rule 484 (noptr-abstract-declarator)
483 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1157
30 abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type • $default reduce using rule 30 (abstract-declarator)
488 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1158
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 588 | ptr-operator • ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → • %empty [")"] 590 | • ptr-abstract-declarator 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 592 | ptr-operator • ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 916 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] ")" reduce using rule 589 (ptr-abstract-declarator-opt) "[" reduce using rule 485 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 904 noptr-declarator go to state 328 ptr-abstract-declarator go to state 912 ptr-abstract-declarator-opt go to state 913 ptr-declarator go to state 349 ptr-operator go to state 1051 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 546 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" • initializer-clause 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 1159 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 544 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" • initializer-clause 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 1160 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
721 type-parameter → template-head type-parameter-key IDENTIFIER-opt "=" id-expression • $default reduce using rule 721 (type-parameter)
286 fold-expression → "(" "..." fold-operator cast-expression ")" • $default reduce using rule 286 (fold-expression)
285 fold-expression → "(" cast-expression fold-operator "..." ")" • $default reduce using rule 285 (fold-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" cast-expression fold-operator "..." fold-operator • cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 await-expression go to state 268 cast-expression go to state 1161 class-name go to state 55 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 fold-expression go to state 277 id-expression go to state 278 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 requires-expression go to state 295 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
347 init-capture → "&" ELLIPSIS-opt IDENTIFIER initializer • $default reduce using rule 347 (init-capture)
498 operator-function-id → "operator" overloadable-operator "<" template-argument-list-opt ">" • $default reduce using rule 498 (operator-function-id)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 733 typename-specifier → "typename" nested-name-specifier • IDENTIFIER 734 | "typename" nested-name-specifier • TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 228 "template" shift, and go to state 229 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 230
137 class-name → • IDENTIFIER 138 | • simple-template-id 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 724 type-requirement → "typename" nested-name-specifier-opt • type-name ";" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 506 class-name go to state 55 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 1162 typedef-name go to state 108
148 compound-requirement → "{" expression • "}" NOEXCEPT-opt return-type-requirement-opt ";" 278 expression → expression • "," assignment-expression "," shift, and go to state 533 "}" shift, and go to state 1163
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 130 | "(" • type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 285 | "(" • cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" • "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 579 | "(" • expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 616 requirement-parameter-list → "(" • parameter-declaration-clause ")" 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "..." shift, and go to state 438 IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 "..." [reduce using rule 551 (parameter-declaration-list-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "this" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] ")" reduce using rule 551 (parameter-declaration-list-opt) "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 219 await-expression go to state 268 cast-expression go to state 439 class-key go to state 405 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 440 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 parameter-declaration go to state 618 parameter-declaration-clause go to state 762 parameter-declaration-list go to state 620 parameter-declaration-list-opt go to state 621 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 408 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 441 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 414 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
461 nested-requirement → "requires" constraint-expression • ";" ";" shift, and go to state 1164
643 simple-requirement → expression ";" • $default reduce using rule 643 (simple-requirement)
615 requirement-body → "{" requirement-seq "}" • $default reduce using rule 615 (requirement-body)
620 requirement-seq → requirement-seq requirement • $default reduce using rule 620 (requirement-seq)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 570 | "dynamic_cast" "<" type-id ">" "(" • expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1165 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 571 | "static_cast" "<" type-id ">" "(" • expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1166 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 572 | "reinterpret_cast" "<" type-id ">" "(" • expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1167 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 573 | "const_cast" "<" type-id ">" "(" • expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1168 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
743 unary-expression → "sizeof" "..." "(" IDENTIFIER ")" • $default reduce using rule 743 (unary-expression)
223 delete-expression → SCOPE-opt "delete" "[" "]" cast-expression • $default reduce using rule 223 (delete-expression)
472 new-placement → "(" expression-list ")" • $default reduce using rule 472 (new-placement)
467 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id • ")" new-initializer-opt ")" shift, and go to state 1169
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 468 new-initializer → "(" • expression-list-opt ")" 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression-list go to state 809 expression-list-opt go to state 1170 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 646 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
469 new-initializer → braced-init-list • $default reduce using rule 469 (new-initializer)
471 new-initializer-opt → new-initializer • $default reduce using rule 471 (new-initializer-opt)
466 new-expression → SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt • $default reduce using rule 466 (new-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty ["]"] 283 | • expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 494 noptr-new-declarator → "[" • expression-opt "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 282 (expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1109 expression-opt go to state 1171 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
465 new-declarator-opt → new-declarator • $default reduce using rule 465 (new-declarator-opt)
475 new-type-id → type-specifier-seq new-declarator-opt • $default reduce using rule 475 (new-type-id)
463 new-declarator → noptr-new-declarator • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 495 noptr-new-declarator → noptr-new-declarator • "[" constant-expression "]" attribute-specifier-seq-opt "[" shift, and go to state 1172 $default reduce using rule 463 (new-declarator)
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 462 new-declarator → • ptr-operator new-declarator-opt 462 | ptr-operator • new-declarator-opt 463 | • noptr-new-declarator 464 new-declarator-opt → • %empty [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 465 | • new-declarator 494 noptr-new-declarator → • "[" expression-opt "]" attribute-specifier-seq-opt 495 | • noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 159 "[" shift, and go to state 1080 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 "&" [reduce using rule 464 (new-declarator-opt)] "&&" [reduce using rule 464 (new-declarator-opt)] "*" [reduce using rule 464 (new-declarator-opt)] $default reduce using rule 464 (new-declarator-opt) class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 new-declarator go to state 1081 new-declarator-opt go to state 1173 noptr-new-declarator go to state 1083 ptr-operator go to state 1084 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
385 lambda-declarator → "(" parameter-declaration-clause ")" lambda-specifiers • requires-clause-opt 621 requires-clause → • "requires" constraint-logical-or-expression 622 requires-clause-opt → • %empty ["{"] 623 | • requires-clause "requires" shift, and go to state 380 $default reduce using rule 622 (requires-clause-opt) requires-clause go to state 697 requires-clause-opt go to state 1174
131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->"] 192 | • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 384 lambda-declarator → • lambda-specifiers 385 | • "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 387 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt • lambda-declarator compound-statement 389 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "(" shift, and go to state 536 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 191 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 538 decl-specifier-seq-opt go to state 539 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 lambda-declarator go to state 1175 lambda-specifiers go to state 541 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
478 noexcept-specifier → "noexcept" "(" constant-expression • ")" ")" shift, and go to state 1176
704 trailing-return-type-opt → trailing-return-type • $default reduce using rule 704 (trailing-return-type-opt)
389 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt • $default reduce using rule 389 (lambda-specifiers)
445 namespace-alias-definition → "namespace" IDENTIFIER • "=" qualified-namespace-specifier ";" "=" shift, and go to state 319
137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 376 labeled-statement → attribute-specifier-seq-opt IDENTIFIER • ":" statement 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] 755 unqualified-id → IDENTIFIER • [",", "+", "-", "=", ";", "(", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "<=>", "?", "&&", "||", "->", ".", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "++", "--"] ":" shift, and go to state 1177 "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "<" reduce using rule 696 (template-name) "<" [reduce using rule 755 (unqualified-id)] $default reduce using rule 755 (unqualified-id)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 80 attribute-specifier → "[" • "[" attribute-using-prefix-opt attribute-list "]" "]" 123 capture → • simple-capture 124 | • init-capture 125 capture-default → • "&" 126 | • "=" 127 capture-list → • capture 128 | • capture-list "," capture 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 379 lambda-capture → • capture-default 380 | • capture-list 381 | • capture-default "," capture-list 382 lambda-capture-opt → • %empty ["]"] 383 | • lambda-capture 388 lambda-introducer → "[" • lambda-capture-opt "]" 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 155 IDENTIFIER shift, and go to state 442 "this" shift, and go to state 443 "=" shift, and go to state 444 "&" shift, and go to state 445 "[" shift, and go to state 332 "*" shift, and go to state 446 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 382 (lambda-capture-opt) ELLIPSIS-opt go to state 447 capture go to state 448 capture-default go to state 449 capture-list go to state 450 init-capture go to state 451 lambda-capture go to state 452 lambda-capture-opt go to state 453 simple-capture go to state 454
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 171 coroutine-return-statement → "co_return" • expr-or-braced-init-list-opt ";" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 273 expr-or-braced-init-list → • expression 274 | • braced-init-list 275 expr-or-braced-init-list-opt → • %empty [";"] 276 | • expr-or-braced-init-list 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ";" reduce using rule 275 (expr-or-braced-init-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 braced-init-list go to state 1178 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expr-or-braced-init-list go to state 1179 expr-or-braced-init-list-opt go to state 1180 expression go to state 1181 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
378 labeled-statement → attribute-specifier-seq-opt "default" • ":" statement ":" shift, and go to state 1182
149 compound-statement → • "{" statement-seq-opt "}" 707 try-block → "try" • compound-statement handler-seq "{" shift, and go to state 793 compound-statement go to state 1183
367 iteration-statement → "while" • "(" condition ")" statement "(" shift, and go to state 1184
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 368 iteration-statement → "do" • statement "while" "(" expression ")" ";" 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1185 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
369 iteration-statement → "for" • "(" init-statement condition-opt ";" expression-opt ")" statement 370 | "for" • "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement "(" shift, and go to state 1186
371 jump-statement → "break" • ";" ";" shift, and go to state 1187
372 jump-statement → "continue" • ";" ";" shift, and go to state 1188
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 273 expr-or-braced-init-list → • expression 274 | • braced-init-list 275 expr-or-braced-init-list-opt → • %empty [";"] 276 | • expr-or-braced-init-list 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 373 jump-statement → "return" • expr-or-braced-init-list-opt ";" 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ";" reduce using rule 275 (expr-or-braced-init-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 braced-init-list go to state 1178 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expr-or-braced-init-list go to state 1179 expr-or-braced-init-list-opt go to state 1189 expression go to state 1181 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
375 jump-statement → "goto" • IDENTIFIER ";" IDENTIFIER shift, and go to state 1190
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 377 labeled-statement → attribute-specifier-seq-opt "case" • constant-expression ":" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 1191 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
3 CONSTEXPR-opt → • %empty ["("] 4 | • "constexpr" 17 NOT-opt → • %empty ["consteval"] 18 | • "!" 628 selection-statement → "if" • CONSTEXPR-opt "(" init-statement-opt condition ")" statement 629 | "if" • CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 630 | "if" • NOT-opt "consteval" compound-statement 631 | "if" • NOT-opt "consteval" compound-statement "else" statement "constexpr" shift, and go to state 1192 "!" shift, and go to state 1193 "consteval" reduce using rule 17 (NOT-opt) $default reduce using rule 3 (CONSTEXPR-opt) CONSTEXPR-opt go to state 1194 NOT-opt go to state 1195
632 selection-statement → "switch" • "(" init-statement-opt condition ")" statement "(" shift, and go to state 1196
666 statement → attribute-specifier-seq-opt compound-statement • $default reduce using rule 666 (statement)
374 jump-statement → coroutine-return-statement • $default reduce using rule 374 (jump-statement)
602 ref-qualifier → • "&" 603 | • "&&" 604 ref-qualifier-opt → • %empty ["["] 605 | • ref-qualifier 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" initializer ";" "&" shift, and go to state 338 "&&" shift, and go to state 339 $default reduce using rule 604 (ref-qualifier-opt) ref-qualifier go to state 340 ref-qualifier-opt go to state 341
278 expression → expression • "," assignment-expression 283 expression-opt → expression • [";", ")", "]"] "," shift, and go to state 533 $default reduce using rule 283 (expression-opt)
284 expression-statement → expression-opt • ";" ";" shift, and go to state 1197
665 statement → attribute-specifier-seq-opt expression-statement • $default reduce using rule 665 (statement)
668 statement → attribute-specifier-seq-opt iteration-statement • $default reduce using rule 668 (statement)
669 statement → attribute-specifier-seq-opt jump-statement • $default reduce using rule 669 (statement)
667 statement → attribute-specifier-seq-opt selection-statement • $default reduce using rule 667 (statement)
671 statement → attribute-specifier-seq-opt try-block • $default reduce using rule 671 (statement)
673 statement-seq → statement-seq statement • $default reduce using rule 673 (statement-seq)
149 compound-statement → "{" statement-seq-opt "}" • $default reduce using rule 149 (compound-statement)
157 conditional-expression → logical-or-expression "?" expression ":" assignment-expression • $default reduce using rule 157 (conditional-expression)
460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body • "}" "}" shift, and go to state 1198
677 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal ")" ";" • $default reduce using rule 677 (static_assert-declaration)
443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" • $default reduce using rule 443 (named-namespace-definition)
75 attribute-list → attribute-list "," attribute • "..." 78 attribute-opt → attribute • [",", "]"] "..." shift, and go to state 1199 $default reduce using rule 78 (attribute-opt)
73 attribute-list → attribute-list "," attribute-opt • $default reduce using rule 73 (attribute-list)
80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" "]" • $default reduce using rule 80 (attribute-specifier)
79 attribute-scoped-token → attribute-namespace "::" IDENTIFIER • $default reduce using rule 79 (attribute-scoped-token)
91 balanced-token → • "(" balanced-token-seq-opt ")" 91 | "(" • balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty [")"] 98 | • balanced-token-seq "(" shift, and go to state 1126 "[" shift, and go to state 1127 "{" shift, and go to state 1128 BALANCED_TOKEN shift, and go to state 1129 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1130 balanced-token-seq go to state 1131 balanced-token-seq-opt go to state 1200
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 92 | "[" • balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty ["]"] 98 | • balanced-token-seq "(" shift, and go to state 1126 "[" shift, and go to state 1127 "{" shift, and go to state 1128 BALANCED_TOKEN shift, and go to state 1129 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1130 balanced-token-seq go to state 1131 balanced-token-seq-opt go to state 1201
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 93 | "{" • balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty ["}"] 98 | • balanced-token-seq "(" shift, and go to state 1126 "[" shift, and go to state 1127 "{" shift, and go to state 1128 BALANCED_TOKEN shift, and go to state 1129 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1130 balanced-token-seq go to state 1131 balanced-token-seq-opt go to state 1202
94 balanced-token → BALANCED_TOKEN • $default reduce using rule 94 (balanced-token)
95 balanced-token-seq → balanced-token • $default reduce using rule 95 (balanced-token-seq)
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 96 balanced-token-seq → balanced-token-seq • balanced-token 98 balanced-token-seq-opt → balanced-token-seq • [")", "]", "}"] "(" shift, and go to state 1126 "[" shift, and go to state 1127 "{" shift, and go to state 1128 BALANCED_TOKEN shift, and go to state 1129 $default reduce using rule 98 (balanced-token-seq-opt) balanced-token go to state 1203
68 attribute-argument-clause → "(" balanced-token-seq-opt • ")" ")" shift, and go to state 1204
343 identifier-list → identifier-list "," IDENTIFIER • $default reduce using rule 343 (identifier-list)
642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer • ";" ";" shift, and go to state 1205
326 function-body → "=" "delete" ";" • $default reduce using rule 326 (function-body)
325 function-body → "=" "default" ";" • $default reduce using rule 325 (function-body)
402 mem-initializer-list → mem-initializer ELLIPSIS-opt • $default reduce using rule 402 (mem-initializer-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 398 mem-initializer → mem-initializer-id "(" • expression-list-opt ")" 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 641 await-expression go to state 268 braced-init-list go to state 642 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression-list go to state 809 expression-list-opt go to state 1206 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 initializer-clause go to state 645 initializer-list go to state 646 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
399 mem-initializer → mem-initializer-id braced-init-list • $default reduce using rule 399 (mem-initializer)
137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 398 mem-initializer → • mem-initializer-id "(" expression-list-opt ")" 399 | • mem-initializer-id braced-init-list 400 mem-initializer-id → • class-or-decltype 401 | • IDENTIFIER 403 mem-initializer-list → mem-initializer-list "," • mem-initializer ELLIPSIS-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 1009 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1010 decltype-specifier go to state 873 enum-name go to state 71 mem-initializer go to state 1207 mem-initializer-id go to state 1012 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 874 nested-name-specifier-opt go to state 875 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
331 function-try-block → "try" ctor-initializer-opt compound-statement • handler-seq 335 handler → • "catch" "(" exception-declaration ")" compound-statement 336 handler-seq → • handler handler-seq-opt "catch" shift, and go to state 1208 handler go to state 1209 handler-seq go to state 1210
478 noexcept-specifier → • "noexcept" "(" constant-expression ")" 479 | • "noexcept" 480 noexcept-specifier-opt → • %empty [",", "...", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] 481 | • noexcept-specifier 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt • noexcept-specifier-opt attribute-specifier-seq-opt "noexcept" shift, and go to state 790 $default reduce using rule 480 (noexcept-specifier-opt) noexcept-specifier go to state 791 noexcept-specifier-opt go to state 1211
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 418 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" • constant-expression brace-or-equal-initializer-opt 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 1212 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
325 function-body → "=" • "default" ";" 326 | "=" • "delete" ";" 597 pure-specifier → "=" • '0' "delete" shift, and go to state 1007 "default" shift, and go to state 1008 '0' shift, and go to state 1213
599 pure-specifier-opt → pure-specifier • $default reduce using rule 599 (pure-specifier-opt)
415 member-declarator → declarator virt-specifier-seq-opt pure-specifier-opt • $default reduce using rule 415 (member-declarator)
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 118 brace-or-equal-initializer-opt → • %empty [",", ";"] 119 | • brace-or-equal-initializer 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 415 member-declarator → declarator • virt-specifier-seq-opt pure-specifier-opt 416 | declarator • requires-clause 417 | declarator • brace-or-equal-initializer-opt 621 requires-clause → • "requires" constraint-logical-or-expression 769 virt-specifier → • "override" 770 | • "final" 771 virt-specifier-seq → • virt-specifier 772 | • virt-specifier-seq virt-specifier 773 virt-specifier-seq-opt → • %empty [",", "=", ";"] 774 | • virt-specifier-seq "=" shift, and go to state 377 "{" shift, and go to state 379 "final" shift, and go to state 611 "requires" shift, and go to state 380 "override" shift, and go to state 612 "," reduce using rule 118 (brace-or-equal-initializer-opt) "," [reduce using rule 773 (virt-specifier-seq-opt)] "=" [reduce using rule 773 (virt-specifier-seq-opt)] ";" reduce using rule 118 (brace-or-equal-initializer-opt) ";" [reduce using rule 773 (virt-specifier-seq-opt)] $default reduce using rule 118 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1021 brace-or-equal-initializer-opt go to state 1022 braced-init-list go to state 382 requires-clause go to state 1214 virt-specifier go to state 614 virt-specifier-seq go to state 615 virt-specifier-seq-opt go to state 1215
420 member-declarator-list → member-declarator-list "," member-declarator • $default reduce using rule 420 (member-declarator-list)
103 base-specifier → attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype • $default reduce using rule 103 (base-specifier)
104 base-specifier → attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype • $default reduce using rule 104 (base-specifier)
140 class-or-decltype → nested-name-specifier "template" simple-template-id • $default reduce using rule 140 (class-or-decltype)
106 base-specifier-list → base-specifier-list "," base-specifier ELLIPSIS-opt • $default reduce using rule 106 (base-specifier-list)
364 initializer-list → initializer-list "," initializer-clause ELLIPSIS-opt • $default reduce using rule 364 (initializer-list)
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id • ";" ";" shift, and go to state 1216
427 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" • $default reduce using rule 427 (module-declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty [$end] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 584 private-module-fragment → "module" ":" "private" ";" • declaration-seq-opt 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 208 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 1217 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 483 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1218
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 488 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1219
546 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause • $default reduce using rule 546 (parameter-declaration)
544 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause • $default reduce using rule 544 (parameter-declaration)
287 fold-expression → "(" cast-expression fold-operator "..." fold-operator cast-expression • ")" ")" shift, and go to state 1220
724 type-requirement → "typename" nested-name-specifier-opt type-name • ";" ";" shift, and go to state 1221
15 NOEXCEPT-opt → • %empty [";", "->"] 16 | • "noexcept" 148 compound-requirement → "{" expression "}" • NOEXCEPT-opt return-type-requirement-opt ";" "noexcept" shift, and go to state 1222 $default reduce using rule 15 (NOEXCEPT-opt) NOEXCEPT-opt go to state 1223
461 nested-requirement → "requires" constraint-expression ";" • $default reduce using rule 461 (nested-requirement)
278 expression → expression • "," assignment-expression 570 postfix-expression → "dynamic_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 533 ")" shift, and go to state 1224
278 expression → expression • "," assignment-expression 571 postfix-expression → "static_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 533 ")" shift, and go to state 1225
278 expression → expression • "," assignment-expression 572 postfix-expression → "reinterpret_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 533 ")" shift, and go to state 1226
278 expression → expression • "," assignment-expression 573 postfix-expression → "const_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 533 ")" shift, and go to state 1227
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 467 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id ")" • new-initializer-opt 468 new-initializer → • "(" expression-list-opt ")" 469 | • braced-init-list 470 new-initializer-opt → • %empty [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 471 | • new-initializer "(" shift, and go to state 1076 "{" shift, and go to state 379 "{" [reduce using rule 470 (new-initializer-opt)] $default reduce using rule 470 (new-initializer-opt) braced-init-list go to state 1077 new-initializer go to state 1078 new-initializer-opt go to state 1228
468 new-initializer → "(" expression-list-opt • ")" ")" shift, and go to state 1229
494 noptr-new-declarator → "[" expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1230
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 495 noptr-new-declarator → noptr-new-declarator "[" • constant-expression "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 308 constant-expression go to state 1231 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 310 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305
462 new-declarator → ptr-operator new-declarator-opt • $default reduce using rule 462 (new-declarator)
385 lambda-declarator → "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt • $default reduce using rule 385 (lambda-declarator)
149 compound-statement → • "{" statement-seq-opt "}" 387 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator • compound-statement "{" shift, and go to state 793 compound-statement go to state 1232
478 noexcept-specifier → "noexcept" "(" constant-expression ")" • $default reduce using rule 478 (noexcept-specifier)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 376 | attribute-specifier-seq-opt IDENTIFIER ":" • statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1233 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
274 expr-or-braced-init-list → braced-init-list • $default reduce using rule 274 (expr-or-braced-init-list)
276 expr-or-braced-init-list-opt → expr-or-braced-init-list • $default reduce using rule 276 (expr-or-braced-init-list-opt)
171 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt • ";" ";" shift, and go to state 1234
273 expr-or-braced-init-list → expression • [";", ")"] 278 expression → expression • "," assignment-expression "," shift, and go to state 533 $default reduce using rule 273 (expr-or-braced-init-list)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 378 | attribute-specifier-seq-opt "default" ":" • statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1235 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
335 handler → • "catch" "(" exception-declaration ")" compound-statement 336 handler-seq → • handler handler-seq-opt 707 try-block → "try" compound-statement • handler-seq "catch" shift, and go to state 1208 handler go to state 1209 handler-seq go to state 1236
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 152 condition → • expression 153 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 367 iteration-statement → "while" "(" • condition ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1237 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 condition go to state 1238 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1239 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
368 iteration-statement → "do" statement • "while" "(" expression ")" ";" "while" shift, and go to state 1240
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [";"] 283 | • expression 284 expression-statement → • expression-opt ";" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 329 function-specifier → • "virtual" 330 | • explicit-specifier 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 354 init-statement → • expression-statement 355 | • simple-declaration 356 | • alias-declaration 357 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 358 | • init-statement 369 iteration-statement → "for" "(" • init-statement condition-opt ";" expression-opt ")" statement 370 | "for" "(" • init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 237 "inline" shift, and go to state 150 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 242 "-" shift, and go to state 243 "using" shift, and go to state 1241 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 357 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 357 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 357 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 357 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 357 (init-statement-opt)] ";" reduce using rule 282 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 357 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 357 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 357 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 357 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 357 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 357 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 357 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 357 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 357 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 357 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 357 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 357 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 357 (init-statement-opt)] "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 357 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 357 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 357 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 357 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 357 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 357 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 357 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 357 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 357 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 357 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 357 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 357 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 357 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 357 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 357 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 357 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 357 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 alias-declaration go to state 1242 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 1243 await-expression go to state 268 cast-expression go to state 269 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 274 exclusive-or-expression go to state 275 explicit-specifier go to state 154 expression go to state 1109 expression-opt go to state 1110 expression-statement go to state 1244 fold-expression go to state 277 function-specifier go to state 79 id-expression go to state 278 inclusive-or-expression go to state 279 init-statement go to state 1245 init-statement-opt go to state 1246 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-declaration go to state 1247 simple-template-id go to state 297 simple-type-specifier go to state 408 storage-class-specifier go to state 99 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
371 jump-statement → "break" ";" • $default reduce using rule 371 (jump-statement)
372 jump-statement → "continue" ";" • $default reduce using rule 372 (jump-statement)
373 jump-statement → "return" expr-or-braced-init-list-opt • ";" ";" shift, and go to state 1248
375 jump-statement → "goto" IDENTIFIER • ";" ";" shift, and go to state 1249
377 labeled-statement → attribute-specifier-seq-opt "case" constant-expression • ":" statement ":" shift, and go to state 1250
4 CONSTEXPR-opt → "constexpr" • $default reduce using rule 4 (CONSTEXPR-opt)
18 NOT-opt → "!" • $default reduce using rule 18 (NOT-opt)
628 selection-statement → "if" CONSTEXPR-opt • "(" init-statement-opt condition ")" statement 629 | "if" CONSTEXPR-opt • "(" init-statement-opt condition ")" statement "else" statement "(" shift, and go to state 1251
630 selection-statement → "if" NOT-opt • "consteval" compound-statement 631 | "if" NOT-opt • "consteval" compound-statement "else" statement "consteval" shift, and go to state 1252
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [";"] 283 | • expression 284 expression-statement → • expression-opt ";" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 329 function-specifier → • "virtual" 330 | • explicit-specifier 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 354 init-statement → • expression-statement 355 | • simple-declaration 356 | • alias-declaration 357 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "alignas", "(", "&", "[", "co_await", "class", "struct", "union", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 358 | • init-statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 632 selection-statement → "switch" "(" • init-statement-opt condition ")" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 237 "inline" shift, and go to state 150 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 242 "-" shift, and go to state 243 "using" shift, and go to state 1241 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 357 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 357 (init-statement-opt)] "noexcept" [reduce using rule 357 (init-statement-opt)] "!" [reduce using rule 357 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 357 (init-statement-opt)] "this" [reduce using rule 357 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 357 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 357 (init-statement-opt)] "+" [reduce using rule 357 (init-statement-opt)] "-" [reduce using rule 357 (init-statement-opt)] ";" reduce using rule 282 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 357 (init-statement-opt)] "(" [reduce using rule 357 (init-statement-opt)] "&" [reduce using rule 357 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 357 (init-statement-opt)] "co_await" [reduce using rule 357 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 357 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 357 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 357 (init-statement-opt)] "operator" [reduce using rule 357 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 357 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 357 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 357 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 357 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 357 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "delete" [reduce using rule 357 (init-statement-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 357 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 357 (init-statement-opt)] "*" [reduce using rule 357 (init-statement-opt)] "requires" [reduce using rule 357 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "new" [reduce using rule 357 (init-statement-opt)] "~" [reduce using rule 357 (init-statement-opt)] "++" [reduce using rule 357 (init-statement-opt)] "--" [reduce using rule 357 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 357 (init-statement-opt)] "auto" [reduce using rule 710 (type-constraint-opt)] "dynamic_cast" [reduce using rule 357 (init-statement-opt)] "static_cast" [reduce using rule 357 (init-statement-opt)] "reinterpret_cast" [reduce using rule 357 (init-statement-opt)] "const_cast" [reduce using rule 357 (init-statement-opt)] "typeid" [reduce using rule 357 (init-statement-opt)] "literal" [reduce using rule 357 (init-statement-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 357 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 357 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 357 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 357 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 357 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 357 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 357 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 357 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 357 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 357 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 357 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 357 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 357 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 357 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 357 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 357 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 357 (init-statement-opt)] STRING_LITERAL [reduce using rule 357 (init-statement-opt)] "throw" [reduce using rule 357 (init-statement-opt)] "sizeof" [reduce using rule 357 (init-statement-opt)] "alignof" [reduce using rule 357 (init-statement-opt)] "co_yield" [reduce using rule 357 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 alias-declaration go to state 1242 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 1243 await-expression go to state 268 cast-expression go to state 269 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 274 exclusive-or-expression go to state 275 explicit-specifier go to state 154 expression go to state 1109 expression-opt go to state 1110 expression-statement go to state 1244 fold-expression go to state 277 function-specifier go to state 79 id-expression go to state 278 inclusive-or-expression go to state 279 init-statement go to state 1253 init-statement-opt go to state 1254 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-declaration go to state 1247 simple-template-id go to state 297 simple-type-specifier go to state 408 storage-class-specifier go to state 99 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
284 expression-statement → expression-opt ";" • $default reduce using rule 284 (expression-statement)
460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" • $default reduce using rule 460 (nested-namespace-definition)
75 attribute-list → attribute-list "," attribute "..." • $default reduce using rule 75 (attribute-list)
91 balanced-token → "(" balanced-token-seq-opt • ")" ")" shift, and go to state 1255
92 balanced-token → "[" balanced-token-seq-opt • "]" "]" shift, and go to state 1256
93 balanced-token → "{" balanced-token-seq-opt • "}" "}" shift, and go to state 1257
96 balanced-token-seq → balanced-token-seq balanced-token • $default reduce using rule 96 (balanced-token-seq)
68 attribute-argument-clause → "(" balanced-token-seq-opt ")" • $default reduce using rule 68 (attribute-argument-clause)
642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" • $default reduce using rule 642 (simple-declaration)
398 mem-initializer → mem-initializer-id "(" expression-list-opt • ")" ")" shift, and go to state 1258
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 403 mem-initializer-list → mem-initializer-list "," mem-initializer • ELLIPSIS-opt "..." shift, and go to state 155 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1259
335 handler → "catch" • "(" exception-declaration ")" compound-statement "(" shift, and go to state 1260
335 handler → • "catch" "(" exception-declaration ")" compound-statement 336 handler-seq → • handler handler-seq-opt 336 | handler • handler-seq-opt 337 handler-seq-opt → • %empty [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "template", "this", "typename", "virtual", "private", "protected", "public", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", ":", "co_await", "{", "}", "class", "struct", "union", "&&", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "module", "while", "do", "for", "break", "continue", "return", "goto", "case", "import", "namespace", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 338 | • handler-seq "catch" shift, and go to state 1208 $default reduce using rule 337 (handler-seq-opt) handler go to state 1209 handler-seq go to state 1261 handler-seq-opt go to state 1262
331 function-try-block → "try" ctor-initializer-opt compound-statement handler-seq • $default reduce using rule 331 (function-try-block)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1263
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 118 brace-or-equal-initializer-opt → • %empty [",", ";"] 119 | • brace-or-equal-initializer 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 418 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression • brace-or-equal-initializer-opt "=" shift, and go to state 377 "{" shift, and go to state 379 $default reduce using rule 118 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1021 brace-or-equal-initializer-opt go to state 1264 braced-init-list go to state 382
597 pure-specifier → "=" '0' • $default reduce using rule 597 (pure-specifier)
416 member-declarator → declarator requires-clause • $default reduce using rule 416 (member-declarator)
415 member-declarator → declarator virt-specifier-seq-opt • pure-specifier-opt 597 pure-specifier → • "=" '0' 598 pure-specifier-opt → • %empty [",", ";"] 599 | • pure-specifier "=" shift, and go to state 1265 $default reduce using rule 598 (pure-specifier-opt) pure-specifier go to state 1145 pure-specifier-opt go to state 1146
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" • $default reduce using rule 215 (deduction-guide)
584 private-module-fragment → "module" ":" "private" ";" declaration-seq-opt • $default reduce using rule 584 (private-module-fragment)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 483 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "[" [reduce using rule 483 (noptr-abstract-declarator)] $default reduce using rule 483 (noptr-abstract-declarator) alignment-specifier go to state 165 attribute-specifier go to state 166
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 488 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "[" [reduce using rule 488 (noptr-abstract-pack-declarator)] $default reduce using rule 488 (noptr-abstract-pack-declarator) alignment-specifier go to state 165 attribute-specifier go to state 166
287 fold-expression → "(" cast-expression fold-operator "..." fold-operator cast-expression ")" • $default reduce using rule 287 (fold-expression)
724 type-requirement → "typename" nested-name-specifier-opt type-name ";" • $default reduce using rule 724 (type-requirement)
16 NOEXCEPT-opt → "noexcept" • $default reduce using rule 16 (NOEXCEPT-opt)
148 compound-requirement → "{" expression "}" NOEXCEPT-opt • return-type-requirement-opt ";" 625 return-type-requirement → • "->" type-constraint 626 return-type-requirement-opt → • %empty [";"] 627 | • return-type-requirement "->" shift, and go to state 1266 $default reduce using rule 626 (return-type-requirement-opt) return-type-requirement go to state 1267 return-type-requirement-opt go to state 1268
570 postfix-expression → "dynamic_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 570 (postfix-expression)
571 postfix-expression → "static_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 571 (postfix-expression)
572 postfix-expression → "reinterpret_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 572 (postfix-expression)
573 postfix-expression → "const_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 573 (postfix-expression)
467 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt • $default reduce using rule 467 (new-expression)
468 new-initializer → "(" expression-list-opt ")" • $default reduce using rule 468 (new-initializer)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 494 noptr-new-declarator → "[" expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1269
495 noptr-new-declarator → noptr-new-declarator "[" constant-expression • "]" attribute-specifier-seq-opt "]" shift, and go to state 1270
387 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement • $default reduce using rule 387 (lambda-expression)
376 labeled-statement → attribute-specifier-seq-opt IDENTIFIER ":" statement • $default reduce using rule 376 (labeled-statement)
171 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt ";" • $default reduce using rule 171 (coroutine-return-statement)
378 labeled-statement → attribute-specifier-seq-opt "default" ":" statement • $default reduce using rule 378 (labeled-statement)
707 try-block → "try" compound-statement handler-seq • $default reduce using rule 707 (try-block)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 153 condition → attribute-specifier-seq-opt • decl-specifier-seq declarator brace-or-equal-initializer 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1271 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
367 iteration-statement → "while" "(" condition • ")" statement ")" shift, and go to state 1272
152 condition → expression • [";", ")"] 278 expression → expression • "," assignment-expression "," shift, and go to state 533 $default reduce using rule 152 (condition)
368 iteration-statement → "do" statement "while" • "(" expression ")" ";" "(" shift, and go to state 1273
44 alias-declaration → "using" • IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" IDENTIFIER shift, and go to state 122
356 init-statement → alias-declaration • $default reduce using rule 356 (init-statement)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 642 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1108 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
354 init-statement → expression-statement • $default reduce using rule 354 (init-statement)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 152 condition → • expression 153 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 154 condition-opt → • %empty [";"] 155 | • condition 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 358 init-statement-opt → init-statement • ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 369 iteration-statement → "for" "(" init-statement • condition-opt ";" expression-opt ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 "constexpr" reduce using rule 83 (attribute-specifier-seq-opt) "constexpr" [reduce using rule 358 (init-statement-opt)] "extern" reduce using rule 83 (attribute-specifier-seq-opt) "extern" [reduce using rule 358 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 358 (init-statement-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" reduce using rule 83 (attribute-specifier-seq-opt) "inline" [reduce using rule 358 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 358 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 358 (init-statement-opt)] "virtual" reduce using rule 83 (attribute-specifier-seq-opt) "virtual" [reduce using rule 358 (init-statement-opt)] ";" reduce using rule 154 (condition-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 358 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 358 (init-statement-opt)] "class" reduce using rule 83 (attribute-specifier-seq-opt) "class" [reduce using rule 358 (init-statement-opt)] "struct" reduce using rule 83 (attribute-specifier-seq-opt) "struct" [reduce using rule 358 (init-statement-opt)] "union" reduce using rule 83 (attribute-specifier-seq-opt) "union" [reduce using rule 358 (init-statement-opt)] "const" reduce using rule 83 (attribute-specifier-seq-opt) "const" [reduce using rule 358 (init-statement-opt)] "volatile" reduce using rule 83 (attribute-specifier-seq-opt) "volatile" [reduce using rule 358 (init-statement-opt)] "friend" reduce using rule 83 (attribute-specifier-seq-opt) "friend" [reduce using rule 358 (init-statement-opt)] "typedef" reduce using rule 83 (attribute-specifier-seq-opt) "typedef" [reduce using rule 358 (init-statement-opt)] "consteval" reduce using rule 83 (attribute-specifier-seq-opt) "consteval" [reduce using rule 358 (init-statement-opt)] "constinit" reduce using rule 83 (attribute-specifier-seq-opt) "constinit" [reduce using rule 358 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 358 (init-statement-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "enum" reduce using rule 83 (attribute-specifier-seq-opt) "enum" [reduce using rule 358 (init-statement-opt)] "explicit" reduce using rule 83 (attribute-specifier-seq-opt) "explicit" [reduce using rule 358 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 358 (init-statement-opt)] "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 358 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 358 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 358 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 358 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 358 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 358 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 358 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 358 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 358 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 358 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 358 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 358 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 358 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 358 (init-statement-opt)] "static" reduce using rule 83 (attribute-specifier-seq-opt) "static" [reduce using rule 358 (init-statement-opt)] "thread_local" reduce using rule 83 (attribute-specifier-seq-opt) "thread_local" [reduce using rule 358 (init-statement-opt)] "mutable" reduce using rule 83 (attribute-specifier-seq-opt) "mutable" [reduce using rule 358 (init-statement-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1237 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 condition go to state 1274 condition-opt go to state 1275 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1239 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 320 for-range-declaration → • attribute-specifier-seq-opt decl-specifier-seq declarator 321 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 370 iteration-statement → "for" "(" init-statement-opt • for-range-declaration ":" for-range-initializer ")" statement $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1276 for-range-declaration go to state 1277
355 init-statement → simple-declaration • $default reduce using rule 355 (init-statement)
373 jump-statement → "return" expr-or-braced-init-list-opt ";" • $default reduce using rule 373 (jump-statement)
375 jump-statement → "goto" IDENTIFIER ";" • $default reduce using rule 375 (jump-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 377 | attribute-specifier-seq-opt "case" constant-expression ":" • statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1278 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [";"] 283 | • expression 284 expression-statement → • expression-opt ";" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 329 function-specifier → • "virtual" 330 | • explicit-specifier 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 354 init-statement → • expression-statement 355 | • simple-declaration 356 | • alias-declaration 357 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "alignas", "(", "&", "[", "co_await", "class", "struct", "union", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 358 | • init-statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 628 selection-statement → "if" CONSTEXPR-opt "(" • init-statement-opt condition ")" statement 629 | "if" CONSTEXPR-opt "(" • init-statement-opt condition ")" statement "else" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 237 "inline" shift, and go to state 150 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 242 "-" shift, and go to state 243 "using" shift, and go to state 1241 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 248 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 357 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 357 (init-statement-opt)] "noexcept" [reduce using rule 357 (init-statement-opt)] "!" [reduce using rule 357 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 357 (init-statement-opt)] "this" [reduce using rule 357 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 357 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 357 (init-statement-opt)] "+" [reduce using rule 357 (init-statement-opt)] "-" [reduce using rule 357 (init-statement-opt)] ";" reduce using rule 282 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 357 (init-statement-opt)] "(" [reduce using rule 357 (init-statement-opt)] "&" [reduce using rule 357 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 357 (init-statement-opt)] "co_await" [reduce using rule 357 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 357 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 357 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 357 (init-statement-opt)] "operator" [reduce using rule 357 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 357 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 357 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 357 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 357 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 357 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "delete" [reduce using rule 357 (init-statement-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 357 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 357 (init-statement-opt)] "*" [reduce using rule 357 (init-statement-opt)] "requires" [reduce using rule 357 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "new" [reduce using rule 357 (init-statement-opt)] "~" [reduce using rule 357 (init-statement-opt)] "++" [reduce using rule 357 (init-statement-opt)] "--" [reduce using rule 357 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 357 (init-statement-opt)] "auto" [reduce using rule 710 (type-constraint-opt)] "dynamic_cast" [reduce using rule 357 (init-statement-opt)] "static_cast" [reduce using rule 357 (init-statement-opt)] "reinterpret_cast" [reduce using rule 357 (init-statement-opt)] "const_cast" [reduce using rule 357 (init-statement-opt)] "typeid" [reduce using rule 357 (init-statement-opt)] "literal" [reduce using rule 357 (init-statement-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 357 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 357 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 357 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 357 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 357 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 357 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 357 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 357 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 357 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 357 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 357 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 357 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 357 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 357 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 357 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 357 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 357 (init-statement-opt)] STRING_LITERAL [reduce using rule 357 (init-statement-opt)] "throw" [reduce using rule 357 (init-statement-opt)] "sizeof" [reduce using rule 357 (init-statement-opt)] "alignof" [reduce using rule 357 (init-statement-opt)] "co_yield" [reduce using rule 357 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 alias-declaration go to state 1242 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 1243 await-expression go to state 268 cast-expression go to state 269 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 273 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 274 exclusive-or-expression go to state 275 explicit-specifier go to state 154 expression go to state 1109 expression-opt go to state 1110 expression-statement go to state 1244 fold-expression go to state 277 function-specifier go to state 79 id-expression go to state 278 inclusive-or-expression go to state 279 init-statement go to state 1253 init-statement-opt go to state 1279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-declaration go to state 1247 simple-template-id go to state 297 simple-type-specifier go to state 408 storage-class-specifier go to state 99 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 415 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
149 compound-statement → • "{" statement-seq-opt "}" 630 selection-statement → "if" NOT-opt "consteval" • compound-statement 631 | "if" NOT-opt "consteval" • compound-statement "else" statement "{" shift, and go to state 793 compound-statement go to state 1280
358 init-statement-opt → init-statement • $default reduce using rule 358 (init-statement-opt)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 152 condition → • expression 153 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 632 selection-statement → "switch" "(" init-statement-opt • condition ")" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1237 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 condition go to state 1281 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1239 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
91 balanced-token → "(" balanced-token-seq-opt ")" • $default reduce using rule 91 (balanced-token)
92 balanced-token → "[" balanced-token-seq-opt "]" • $default reduce using rule 92 (balanced-token)
93 balanced-token → "{" balanced-token-seq-opt "}" • $default reduce using rule 93 (balanced-token)
398 mem-initializer → mem-initializer-id "(" expression-list-opt ")" • $default reduce using rule 398 (mem-initializer)
403 mem-initializer-list → mem-initializer-list "," mem-initializer ELLIPSIS-opt • $default reduce using rule 403 (mem-initializer-list)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "typename", "alignas", "[", "class", "struct", "union", "const", "volatile", "decltype", "enum", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void"] 84 | • attribute-specifier-seq 259 exception-declaration → • attribute-specifier-seq-opt type-specifier-seq declarator 260 | • attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt 261 | • "..." 335 handler → "catch" "(" • exception-declaration ")" compound-statement "..." shift, and go to state 1282 $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1283 exception-declaration go to state 1284
338 handler-seq-opt → handler-seq • $default reduce using rule 338 (handler-seq-opt)
336 handler-seq → handler handler-seq-opt • $default reduce using rule 336 (handler-seq)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "[" [reduce using rule 553 (parameters-and-qualifiers)] $default reduce using rule 553 (parameters-and-qualifiers) alignment-specifier go to state 165 attribute-specifier go to state 166
418 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt • $default reduce using rule 418 (member-declarator)
597 pure-specifier → "=" • '0' '0' shift, and go to state 1213
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 625 return-type-requirement → "->" • type-constraint 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 132 nested-name-specifier-opt go to state 220 simple-template-id go to state 96 template-name go to state 102 type-constraint go to state 1285 type-name go to state 106 typedef-name go to state 108
627 return-type-requirement-opt → return-type-requirement • $default reduce using rule 627 (return-type-requirement-opt)
148 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt • ";" ";" shift, and go to state 1286
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 494 noptr-new-declarator → "[" expression-opt "]" attribute-specifier-seq-opt • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "[" [reduce using rule 494 (noptr-new-declarator)] $default reduce using rule 494 (noptr-new-declarator) alignment-specifier go to state 165 attribute-specifier go to state 166
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 495 noptr-new-declarator → noptr-new-declarator "[" constant-expression "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1287
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 153 condition → attribute-specifier-seq-opt decl-specifier-seq • declarator brace-or-equal-initializer 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator go to state 1288 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 172 ptr-declarator go to state 173 ptr-operator go to state 174 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 367 iteration-statement → "while" "(" condition ")" • statement 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1289 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 368 iteration-statement → "do" statement "while" "(" • expression ")" ";" 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1290 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
155 condition-opt → condition • $default reduce using rule 155 (condition-opt)
369 iteration-statement → "for" "(" init-statement condition-opt • ";" expression-opt ")" statement ";" shift, and go to state 1291
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 320 for-range-declaration → attribute-specifier-seq-opt • decl-specifier-seq declarator 321 | attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1292 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 153 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
370 iteration-statement → "for" "(" init-statement-opt for-range-declaration • ":" for-range-initializer ")" statement ":" shift, and go to state 1293
377 labeled-statement → attribute-specifier-seq-opt "case" constant-expression ":" statement • $default reduce using rule 377 (labeled-statement)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 152 condition → • expression 153 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt • condition ")" statement 629 | "if" CONSTEXPR-opt "(" init-statement-opt • condition ")" statement "else" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 1237 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 condition go to state 1294 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1239 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
630 selection-statement → "if" NOT-opt "consteval" compound-statement • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "}", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "namespace", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 631 | "if" NOT-opt "consteval" compound-statement • "else" statement "else" shift, and go to state 1295 "else" [reduce using rule 630 (selection-statement)] $default reduce using rule 630 (selection-statement)
632 selection-statement → "switch" "(" init-statement-opt condition • ")" statement ")" shift, and go to state 1296
261 exception-declaration → "..." • $default reduce using rule 261 (exception-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 259 exception-declaration → attribute-specifier-seq-opt • type-specifier-seq declarator 260 | attribute-specifier-seq-opt • type-specifier-seq abstract-declarator-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "alignas" shift, and go to state 157 "[" shift, and go to state 161 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 124 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) alignment-specifier go to state 165 attribute-specifier go to state 166 class-key go to state 405 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 413 type-specifier-seq go to state 1297 typedef-name go to state 108 typename-specifier go to state 109
335 handler → "catch" "(" exception-declaration • ")" compound-statement ")" shift, and go to state 1298
625 return-type-requirement → "->" type-constraint • $default reduce using rule 625 (return-type-requirement)
148 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" • $default reduce using rule 148 (compound-requirement)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 495 noptr-new-declarator → noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "alignas" shift, and go to state 157 "[" shift, and go to state 161 "[" [reduce using rule 495 (noptr-new-declarator)] $default reduce using rule 495 (noptr-new-declarator) alignment-specifier go to state 165 attribute-specifier go to state 166
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 153 condition → attribute-specifier-seq-opt decl-specifier-seq declarator • brace-or-equal-initializer "=" shift, and go to state 377 "{" shift, and go to state 379 brace-or-equal-initializer go to state 1299 braced-init-list go to state 382
367 iteration-statement → "while" "(" condition ")" statement • $default reduce using rule 367 (iteration-statement)
278 expression → expression • "," assignment-expression 368 iteration-statement → "do" statement "while" "(" expression • ")" ";" "," shift, and go to state 533 ")" shift, and go to state 1300
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [")"] 283 | • expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 369 iteration-statement → "for" "(" init-statement condition-opt ";" • expression-opt ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 282 (expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expression go to state 1109 expression-opt go to state 1301 fold-expression go to state 277 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 320 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq • declarator 321 | attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 602 ref-qualifier → • "&" 603 | • "&&" 604 ref-qualifier-opt → • %empty ["["] 605 | • ref-qualifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 155 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 158 "&" shift, and go to state 1302 "&&" shift, and go to state 1303 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "[" reduce using rule 604 (ref-qualifier-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 class-name go to state 55 declarator go to state 1304 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-declarator go to state 172 ptr-declarator go to state 173 ptr-operator go to state 174 ref-qualifier go to state 340 ref-qualifier-opt go to state 1305 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 273 expr-or-braced-init-list → • expression 274 | • braced-init-list 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 322 for-range-initializer → • expr-or-braced-init-list 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 370 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" • for-range-initializer ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 237 "noexcept" shift, and go to state 238 "!" shift, and go to state 239 "::" shift, and go to state 240 "this" shift, and go to state 241 "typename" shift, and go to state 8 "+" shift, and go to state 242 "-" shift, and go to state 243 "(" shift, and go to state 244 "&" shift, and go to state 245 "[" shift, and go to state 246 "co_await" shift, and go to state 247 "{" shift, and go to state 379 "operator" shift, and go to state 248 "decltype" shift, and go to state 21 "*" shift, and go to state 249 "requires" shift, and go to state 250 "~" shift, and go to state 251 "++" shift, and go to state 252 "--" shift, and go to state 253 "dynamic_cast" shift, and go to state 254 "static_cast" shift, and go to state 255 "reinterpret_cast" shift, and go to state 256 "const_cast" shift, and go to state 257 "typeid" shift, and go to state 258 "literal" shift, and go to state 259 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 117 "throw" shift, and go to state 260 "sizeof" shift, and go to state 261 "alignof" shift, and go to state 262 "co_yield" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 264 additive-expression go to state 265 and-expression go to state 266 assignment-expression go to state 267 await-expression go to state 268 braced-init-list go to state 1178 cast-expression go to state 269 class-name go to state 55 compare-expression go to state 270 conditional-expression go to state 271 conversion-function-id go to state 272 decltype-specifier go to state 63 delete-expression go to state 273 enum-name go to state 71 equality-expression go to state 274 exclusive-or-expression go to state 275 expr-or-braced-init-list go to state 1306 expression go to state 1181 fold-expression go to state 277 for-range-initializer go to state 1307 id-expression go to state 278 inclusive-or-expression go to state 279 lambda-expression go to state 280 lambda-introducer go to state 281 literal-operator-id go to state 282 logical-and-expression go to state 283 logical-or-expression go to state 284 multiplicative-expression go to state 285 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 286 nested-name-specifier-opt go to state 90 new-expression go to state 287 noexcept-expression go to state 288 operator-function-id go to state 289 placeholder-type-specifier go to state 94 pm-expression go to state 290 postfix-expression go to state 291 primary-expression go to state 292 qualified-id go to state 293 relational-expression go to state 294 requires-expression go to state 295 shift-expression go to state 296 simple-template-id go to state 297 simple-type-specifier go to state 298 string-literal go to state 299 template-id go to state 300 template-name go to state 102 throw-expression go to state 301 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 302 unary-expression go to state 303 unary-operator go to state 304 unqualified-id go to state 305 yield-expression go to state 306
628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition • ")" statement 629 | "if" CONSTEXPR-opt "(" init-statement-opt condition • ")" statement "else" statement ")" shift, and go to state 1308
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 631 selection-statement → "if" NOT-opt "consteval" compound-statement "else" • statement 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1309 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 632 selection-statement → "switch" "(" init-statement-opt condition ")" • statement 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1310 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [")"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 259 exception-declaration → attribute-specifier-seq-opt type-specifier-seq • declarator 260 | attribute-specifier-seq-opt type-specifier-seq • abstract-declarator-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 915 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 916 "&" shift, and go to state 159 "&&" shift, and go to state 162 "decltype" shift, and go to state 21 "*" shift, and go to state 163 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] ")" reduce using rule 32 (abstract-declarator-opt) "[" reduce using rule 485 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 164 abstract-declarator go to state 683 abstract-declarator-opt go to state 1311 abstract-pack-declarator go to state 685 class-name go to state 55 declarator go to state 1312 declarator-id go to state 170 decltype-specifier go to state 120 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 186 noptr-abstract-declarator go to state 686 noptr-abstract-declarator-opt go to state 687 noptr-abstract-pack-declarator go to state 688 noptr-declarator go to state 172 ptr-abstract-declarator go to state 689 ptr-declarator go to state 173 ptr-operator go to state 919 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
149 compound-statement → • "{" statement-seq-opt "}" 335 handler → "catch" "(" exception-declaration ")" • compound-statement "{" shift, and go to state 793 compound-statement go to state 1313
153 condition → attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer • $default reduce using rule 153 (condition)
368 iteration-statement → "do" statement "while" "(" expression ")" • ";" ";" shift, and go to state 1314
369 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt • ")" statement ")" shift, and go to state 1315
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "alignas", "(", "&", "[", "&&", "operator", "decltype", "*", "~"] 84 | • attribute-specifier-seq 594 ptr-operator → "&" • attribute-specifier-seq-opt 602 ref-qualifier → "&" • ["["] "[" reduce using rule 83 (attribute-specifier-seq-opt) "[" [reduce using rule 602 (ref-qualifier)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 330
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "alignas", "(", "&", "[", "&&", "operator", "decltype", "*", "~"] 84 | • attribute-specifier-seq 595 ptr-operator → "&&" • attribute-specifier-seq-opt 603 ref-qualifier → "&&" • ["["] "[" reduce using rule 83 (attribute-specifier-seq-opt) "[" [reduce using rule 603 (ref-qualifier)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 176 attribute-specifier-seq-opt go to state 333
320 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq declarator • $default reduce using rule 320 (for-range-declaration)
321 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt • "[" identifier-list "]" "[" shift, and go to state 1316
322 for-range-initializer → expr-or-braced-init-list • $default reduce using rule 322 (for-range-initializer)
370 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer • ")" statement ")" shift, and go to state 1317
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" • statement 629 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" • statement "else" statement 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1318 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
631 selection-statement → "if" NOT-opt "consteval" compound-statement "else" statement • $default reduce using rule 631 (selection-statement)
632 selection-statement → "switch" "(" init-statement-opt condition ")" statement • $default reduce using rule 632 (selection-statement)
260 exception-declaration → attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt • $default reduce using rule 260 (exception-declaration)
259 exception-declaration → attribute-specifier-seq-opt type-specifier-seq declarator • $default reduce using rule 259 (exception-declaration)
335 handler → "catch" "(" exception-declaration ")" compound-statement • $default reduce using rule 335 (handler)
368 iteration-statement → "do" statement "while" "(" expression ")" ";" • $default reduce using rule 368 (iteration-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 369 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt ")" • statement 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1319 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
321 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" • identifier-list "]" 342 identifier-list → • IDENTIFIER 343 | • identifier-list "," IDENTIFIER IDENTIFIER shift, and go to state 845 identifier-list go to state 1320
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 370 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" • statement 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1321 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "}", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "namespace", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 629 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement • "else" statement "else" shift, and go to state 1322 "else" [reduce using rule 628 (selection-statement)] $default reduce using rule 628 (selection-statement)
369 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt ")" statement • $default reduce using rule 369 (iteration-statement)
321 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list • "]" 343 identifier-list → identifier-list • "," IDENTIFIER "," shift, and go to state 1005 "]" shift, and go to state 1323
370 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement • $default reduce using rule 370 (iteration-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 629 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" • statement 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 149 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 150 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 971 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 972 attribute-specifier-seq-opt go to state 973 block-declaration go to state 974 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 975 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 154 function-specifier go to state 79 labeled-statement go to state 976 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1324 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
321 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" • $default reduce using rule 321 (for-range-declaration)
629 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement • $default reduce using rule 629 (selection-statement)